Linux下奇怪的动态链接器问题



我不是一个经验丰富的Linux开发人员(我的主要平台是Windows(。

我有一个动态加载的.so模块(我们称之为模块A(,它与Libtorrent 1.2.15静态链接。

我用OpenSSL 1.1.1g编译了Libtorrent(它以前也是我构建的(。

现在,一个奇怪的问题两种不同的情况

  1. 如果我编译A时只指定OpenSSL标头和库的路径,而不指定确切的库文件,那么一切都很好!模块编译正常,加载正常,工作正常

也就是说,在我的Qt项目中,这看起来是这样的:

LIBS += -Lpath_to_my_openssl/prebuilt/linux/lib
  1. 如果我在编译A的同时还指定了确切的库文件,那么它编译正常,加载正常(我可以使用这个加载的模块解析种子(,但当我真正尝试启动种子时会崩溃。它崩溃,并出现以下错误:

/home/user/Desktop/build/ui//bin/app:符号查找错误:/home/user/Desktop/build/ui//bin/libdownloadsbt.so.6:未定义符号:TLS_client_method

在我的Qt项目中,这看起来是这样的:

LIBS += -Lpath_to_my_openssl/prebuilt/linux/lib
LIBS += -lcrypto -lssl

第二行就是所有的区别。

发生了什么事?

第页。S.在WindowsmacOS下工作良好。

感谢大家的评论和帮助。原因是图书馆的秩序。在Linux下,它们的链接顺序很重要。

所以,这很好:

-ltorrent-rasterbar -lcrypto -lssl

这在运行时崩溃:

-lcrypto -lssl -ltorrent-rasterbar

最新更新