我正在编译使用arm-linux-gnueabi-g ++版本4.7.3。
我有arm-linux-gnueabi库安装在位置:
/ usr / arm-linux-gnueabi / lib,它包含libdl.a,libdl.so,libdl.so.2和libdl-2.19.so。
libdl.so链接到libdl.so.2,链接到libdl-2.19.so。
我想链接到dl库(请参阅下面的命令string),但我总是得到未定义的引用错误。
arm-linux-gnueabi-g++ -I. -I../ -I../Comms/Linux -Wall -DLINUX -fpic -o ../../work/MyProgram main.o -L../../work -L/usr/arm-linux-gnueabi/lib -lComms -lConsole -lUtilities -ldl ../../work/libUtilities.so: undefined reference to `dlsym' ../../work/libUtilities.so: undefined reference to `dlopen' collect2: error: ld returned 1 exit status
如果我编译使用g ++ 4.8.2使用下面的表示,然后我的程序编译,链接,并执行良好。
g++ -I. -I../ -I../Comms/Linux -Wall -DLINUX -fpic -o ../../work/MyProgram main.o -L../../work -lComms -lConsole -lUtilities -ldl
显然它找不到libdl.so库; 我以为通过使用-L
标志将path添加到适当的库的位置将解决问题,但它没有。
ARM编译器命令丢失了什么?
那么,我找到了答案,我需要-Wl,--no-as-needed
在-ldl
之前-Wl,--no-as-needed
标志。 在我问这个问题之前,我跑过这面旗子,但是显然错误的是因为它没有为我工作。
我不明白为什么这个标志是需要的,但代码现在完成链接。
这里的SO用户表示,它必须与最近(2013年的用户的职位)版本的gcc链接到–as-needed。