强制系统 QT 库使用应用程序附带的 openssl 库
Force system QT libraries to use openssl libraries shipped with the application
我的申请=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
returns 1.0.2l
for QSslSocket::sslLibraryVersionString()
,表示使用系统openssl版本
我可以强制 QT 库以某种方式使用我的应用程序附带的 openssl 吗?
我尝试使用 QCoreApplication::addLibraryPath(const QString &path)
设置库路径,但 QT 库仍然选择系统 openssl 版本。
限制条件:
- 无法重新编译系统上存在的 QT 库
- 无法随应用程序一起发布 QT 库
- 无法更改系统 QT 库上的 RPATH
my_app_exe
已经使用 RPATH
,它指向发布的 openssl 所在的当前目录。
在 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
顺便说一句,设置 LD_LIBRARY_PATH
对我不起作用。
我的申请=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
returns 1.0.2l
for QSslSocket::sslLibraryVersionString()
,表示使用系统openssl版本
我可以强制 QT 库以某种方式使用我的应用程序附带的 openssl 吗?
我尝试使用 QCoreApplication::addLibraryPath(const QString &path)
设置库路径,但 QT 库仍然选择系统 openssl 版本。
限制条件:
- 无法重新编译系统上存在的 QT 库
- 无法随应用程序一起发布 QT 库
- 无法更改系统 QT 库上的 RPATH
my_app_exe
已经使用 RPATH
,它指向发布的 openssl 所在的当前目录。
在 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
顺便说一句,设置 LD_LIBRARY_PATH
对我不起作用。