【发布时间】:2016-08-11 16:37:35
【问题描述】:
我正在将 Ubuntu 14.04 操作系统提升到构建标准。目标是替换现有的 SUSE SLED 11 SP2 构建器。但是我遇到了一个我很难解释的错误。
产生错误的构建命令是
g++
-o
out/linux-rel/bin/PrtReporter
-fstack-protector
-m32
-Wl,-rpath,/local/out/linux-rel/bin
-l:libz.so.1.2.8
out/linux-rel/obj-static/prt/CrashReporter.o
out/linux-rel/obj-static/prt/LibArchiveWrapper.o
out/linux-rel/obj-static/utilities/RTSConfigUtilities.o
-Lout/linux-rel/bin
-Lout/linux-rel/bin
out/linux-rel/bin/libcurl.so
out/linux-rel/bin/libcurl.a
out/linux-rel/bin/libarchive.a
-lpthread
-lrt
-lxml2
在 Ubuntu 上,这会导致链接错误。 g++ 无法从 libz 中找到符号。
要解决这个问题,我可以简单地将 -l:libz.so.1.2.8 放在 out/linux-rel/bin/libarchive.a 之后。这“看起来”是正确的,因为它允许 libarchive.a 找到 libz 符号。即我认为应该在依赖它们的库之后列出。
但我不知道为什么这在 Ubuntu 上是必要的。相同的命令在 SLED 上运行良好。
有什么想法吗?
【问题讨论】:
-
有用的链接。但这并不能解释 Ubuntu 和 SLED 之间的区别。
-
啊——我说得太早了。我在上面找到的链接帮助回答了我的问题。即stackoverflow.com/questions/7826448/… - 导致wiki.ubuntu.com/NattyNarwhal/ToolchainTransition。那么这是 Ubuntu 对 ld 所做的特定更改吗?不寻常。
标签: ubuntu linker g++ linker-errors suse