我的解决方案(用于 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
在 Universal 之前声明依赖于平台的 libdirs 通常是更可取的/usr/lib
吗?谢谢你。
更新:相应的配方是相当标准的,内容如下:
$(EXEC) : $(OBJECTS)
$(CC) $(CFLAGS) $(OBJECTS) -o $(EXEC) $(LDFLAGS) $(LIBRARIES)
$(OBJECTS) : $(SRC)
$(CC) $(CFLAGS) -c $(SRC)
使用
LDFLAGS
是最后的帮手。如果您在 makefile 中使用它,这是使您的软件不可移植的好方法。更好地编写直接使用所需
ld
命令行的 Makefile。例如,您可以使用如下命令行:
并将库搜索的搜索目录列表放入
LDPATH
.请注意,用于的模式匹配宏扩展
LDPATH
不是 POSIXmake
规范的一部分,但该功能已由 SunPro Make 在 1986 年引入,并被许多 make 实现复制,嗯smake
,gnu make
. 如果您有较旧的make
,则需要-Lpath
在命令行中为每个库搜索目录手动使用一个条目。