在 makefile 的 LD 标志中,将具有特定于平台的库的目录优先于 /usr/lib 是否更好?

在 makefile 的 LD 标志中,将具有特定于平台的库的目录优先于 /usr/lib 是否更好?

我的解决方案(针对 Raspbian Buster)的 makefile 包含LDFLAGS如下定义:

LDFLAGS=-L/usr/lib -L/usr/lib/arm-linux-gnueabihf

…以便标准 libdir 优先于特定于平台的 libdir。不幸的是,我在使用 中的一个库时遇到了一些麻烦/usr/lib,由于过时的 C++ ABI,无法链接该库。然而,当我交换目录时,一切正常:

LDFLAGS=-L/usr/lib/arm-linux-gnueabihf -L/usr/lib

通常最好在通用之前声明平台相关的 libdirs 吗/usr/lib?谢谢。

更新:相应的配方相当标准,内容如下:

$(EXEC) : $(OBJECTS)
    $(CC) $(CFLAGS) $(OBJECTS) -o $(EXEC) $(LDFLAGS) $(LIBRARIES)

$(OBJECTS) : $(SRC)
    $(CC) $(CFLAGS) -c $(SRC)

答案1

使用LDFLAGS是最后的手段。如果您在 makefile 中使用它,这是使您的软件不可移植的好方法。

最好编写直接使用所需ld命令行的 Makefile。

例如,您可以使用命令行,例如:

 $(CC) $(CFLAGS) $(OBJECTS) -o $@ $(LDPATH:%=-L%) $(LIBRARIES)

并将库搜索的搜索目录列表放入LDPATH.

请注意,用于的模式匹配宏扩展LDPATH不是 POSIXmake规范的一部分,但此功能已由 SunPro Make 于 1986 年引入,并被许多 make 实现复制,呃smakegnu make。如果您有旧版本make,则需要-Lpath在命令行中手动使用每个库搜索目录的条目。

相关内容