我继承了一个生成文件.so
的Makefile。它通过gcc 4.7.4与Ubuntu上的OpenSSL中的-lcrypto
链接。至关重要的是,它没有与-lssl
或-ldl
链接,而当我运行nm -g thelib.so
时,它只有来自openssl加密的〜15个符号。但是,它们都是U
(未定义)。
我正在另一台Ubuntu计算机上重构Makefile。当我与-lcrypto
链接时,由于dl
需要未定义的符号而导致失败。当我添加到-ldl
的链接时,这些错误消失了,链接成功了。但是,我的.so
文件比原始文件大1.5 MB,并且至少有一百个与SSL相关的符号,它们都是T
(已定义),似乎表明{{1} }正在以某种方式隐式发生。
尽管在我的情况下都对它们进行了定义似乎是审慎和有益的,但我需要弄清楚如何产生与原样相同的结果。
所以,我的问题是,如何使GCC允许链接-lssl
文件并接受未定义的引用?我已经比较了我们的命令,并且尝试消除了几乎没有什么区别,但是似乎没有任何效果。我读到它可能与.so
有关,但是我正在使用它。这是我的链接器标志。
-Wl,--no-as-needed
答案 0 :(得分:0)
在另一个系统(结果更大的系统)上,显然没有将OpenSSL构建为共享对象,而只是将其构建为静态库(但可能是PIC,因此您可以将结果链接到共享对象中) 。您将必须安装提供共享库和相应的.so
符号链接的软件包。