如何使用未定义的引用创建.so共享库-gcc

时间:2018-06-22 17:16:36

标签: gcc openssl

我继承了一个生成文件.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

1 个答案:

答案 0 :(得分:0)

在另一个系统(结果更大的系统)上,显然没有将OpenSSL构建为共享对象,而只是将其构建为静态库(但可能是PIC,因此您可以将结果链接到共享对象中) 。您将必须安装提供共享库和相应的.so符号链接的软件包。