我不是一个经验丰富的Linux
开发人员(我的主要平台是Windows
(。
我有一个动态加载的.so
模块(我们称之为模块A
(,它与Libtorrent 1.2.15
静态链接。
我用OpenSSL 1.1.1g
编译了Libtorrent
(它以前也是我构建的(。
现在,一个奇怪的问题两种不同的情况:
- 如果我编译
A
时只指定OpenSSL
标头和库的路径,而不指定确切的库文件,那么一切都很好!模块编译正常,加载正常,工作正常
也就是说,在我的Qt
项目中,这看起来是这样的:
LIBS += -Lpath_to_my_openssl/prebuilt/linux/lib
- 如果我在编译
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.在Windows
和macOS
下工作良好。
感谢大家的评论和帮助。原因是图书馆的秩序。在Linux下,它们的链接顺序很重要。
所以,这很好:
-ltorrent-rasterbar -lcrypto -lssl
这在运行时崩溃:
-lcrypto -lssl -ltorrent-rasterbar