我的应用程序= libssl.so(1.0.2f
)+ libcrypto.so(1.0.2f
)+ my_app_exe
在Debian 9上,QT版本为5.7
,openssl为1.0.2l
my_app_exe
会为1.0.2l
返回QSslSocket::sslLibraryVersionString()
,这意味着它使用系统openssl版本。
我可以强制QT库以某种方式使用我的应用程序附带的openssl吗?
我已尝试使用QCoreApplication::addLibraryPath(const QString &path)
设置库路径,但QT库仍然会选择系统openssl版本。
my_app_exe
已使用RPATH
指向openssl所在的当前目录。
答案 0 :(得分:3)
在Debian 9上,如果我使用QLibrary
调用预加载(将它们作为main()中的第一个加载),我就可以加载正确的SSL和加密库。这正是QT库正在做的事情loadOpenSsl()
int main()
{
QLibrary libcrypto, libssl;
libcrypto.setFileNameAndVersion(QLatin1String("crypto"), QLatin1String(SHLIB_VERSION_NUMBER));
libssl.setFileNameAndVersion(QLatin1String("ssl"), QLatin1String(SHLIB_VERSION_NUMBER));
...<snipped>...
return 0;
}
请记住,我也在应用程序上设置了RPATH
$ objdump -x my_app_exe | grep -i RPATH
RPATH $ORIGIN/lib
加密库存储在./my_app_exe/lib/lib{ssl,crypto}.so
BTW,设置LD_LIBRARY_PATH
对我不起作用。