原始问题略有不同,但属于更主要问题的一部分。
我正在尝试在 Windows 上使用静态 OpenSSL 将 Qt 5.2 构建为静态。
我的最终目标是发送单个二进制文件无需提供 libeay32.dll 和 ssleay32.dll。然而,在我看来,这是不可能的。我使用静态 openssl 库构建了静态 Qt,但 Qt 似乎完全忽略了提供的库并始终搜索 DLL。
This https://stackoverflow.com/questions/14566212/about-compiling-openssl-inside-qt-application答案还表明 QtNetwork 总是搜索 DLL 并忽略其他所有内容,但它也指出“两个选项是将 OpenSSL 编译到 Qt 中……”但事实似乎并非如此。
有人能给出明确的答案吗?
这是我的 Qt 配置(为了可读性添加了换行符):
configure -static -qmake -opensource -nomake examples -opengl desktop
-platform win32-msvc2010 -openssl -I C:\git\openssl\build\include
-L C:\git\openssl\build\lib OPENSSL_LIBS="-llibeay32 -lssleay32 -lgdi32"
有没有办法用静态 OpenSSL 构建静态 Qt?
当然,配置 Qt 时需要使用以下选项:
-openssl-linked
原因是 QtNetwork 使用QLibrary
默认情况下,类用于动态打开库以获取必要的符号。
这是告诉 Qt 不要这样做的选项,并尊重正常的链接规则。
话虽这么说,如果需要在没有您参与的情况下为最终用户提供安全更新,则不建议对 openssl 使用静态链接。考虑一下如果您离开、不再从事该项目等会发生什么。
此外,此设置并未经常测试,因此您实际上可能会遇到一些应该在上游修复的问题,但这是针对相关用例的解决方案设计。
免责声明:由于 SO 是关于编程的,所以我忽略了针对 Qt 的静态链接的许可后果,所以我想快速提醒您注意正确的用法,以免陷入法律麻烦。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)