这有点学术性,因为我已经解决了它(我认为!),但好奇是否有人知道它为什么会发生。
我正在开发一个已经开发了几年的项目,我们有几个我们依赖的库,例如:
myencryption.so
|
----- #include <openssl/sha.h>
mymainapp
|
----- LIBS += -lmyencryption -lssl -lcrypto
当它失败时,它会失败并显示如下消息:
../../bin/libbcencryption.so: undefined reference to `SHA256_Update'
../../bin/libbcencryption.so: undefined reference to `SHA256_Final'
../../bin/libbcencryption.so: undefined reference to `SHA256_Init'
过去可以正常工作和构建,现在我们正在向前推进我们的平台,并且 GCC 4.6 是可用的最新版本,它会导致以这种方式链接库的重大构建问题,但只有当库与二进制文件链接时。现在让构建工作它的结构:
myencryption.so
|
----- #include <openssl/sha.h>
----- LIBS += -lssl -lcrypto
哪个工作正常。还需要其他东西,例如对以前编译中从未需要的 Qt 库的引用。
但是,我在 GCC 发行说明中找不到对此类更改的任何参考,因此我非常好奇是否有人知道它是否已更改或是否涉及其他因素,因此这是一个基于 Qt 的项目,它是从基础迁移而来的Ubuntu 11.04 到 12.10 平台,GCC 版本从 4.5.2 到 4.6.3。除了在 Ubuntu 中进行的任何升级之外,构建过程中的任何内容都没有改变。
编辑:看起来评论中引用的答案接近于解释问题,并更新了ld
导致头痛的问题。