以下是描述我的问题的示例:
ld -Lpath1 -Lpath2 -lA -lB -Xlinker -T -Xlinker \
-W1,-rpath,/usr/local/lib -l-o target
ld: cannot find -lA
collect2: ld returned 2 exit status
path1和path2都是相对路径,我可以根据ld的pwd找到库A,那么为什么ld会输出这个错误信息?
有人能给我一些调试这个问题的建议吗?
我想念一些,在名为rt的图书馆之前有一个“-static”。
作为你的建议,我试着让gcc驱动ld做链接过程。 gcc A.o B.o -mabi = 64 -static -lrt -Xlinker -T -Xlinker ld.script -W1,-rpath,/ usr / local / lib -lmemdbg -o target 它不起作用。
然后我删除了“-static”选项,并在-lpthread之后删除了另一个动态库(因为rt依赖于我删除“-static”时找到的pthread)
gcc A.o B.o -mabi = 64 -lrt -lpthread -Xlinker -T -Xlinker ld.script -W1,-rpath,/ usr / local / lib -lmemdbg -o target 这次,对象成功地连接在一起。
然后我尝试通过将“-v”传递给gcc来弄清楚为什么“-static”命令不起作用 。出现了一些“-L”选项,并在搜索列表中找到一个名为librt.a的库。
我真的很困惑。 gcc的版本是4.3答案 0 :(得分:1)
可能存在各种因素:
path1/libA.a
? path1/libA.so
?-W1
选项应该是-Wl
,但这不会导致链接错误。-l-o
选项应该是两个带-l
选项参数的选项(除非你真的有一个库lib-o.a
或lib-o.so
)。main()
- 而且只在经典的Unix而不是Linux系统上。ld
时直接使用共享对象而不是使用编译器时会感到悲痛。