2016-03-02 81 views
1

嗨我想编译一个我为静态的Windows编译为可执行文件的openssl库的QT程序。我以为我成功了,但是如果没有Openssl dll,我就无法运行。我在网上搜寻,试图找到一个解决方案,但不能。下面是我做了什么:QT https SSL支持静态QT静态程序构建 - 仍然需要openssl dll

我过了这个通过编辑Windows PowerShell脚本用于静态构建Qt来configure.bat,然后运行它来构建:

-openssl-linked 
-I C:\OpenSSL-Win32\include 
-L C:\OpenSSL-Win32\lib\MinGW 
OPENSSL_LIBS=""-lUser32 -lAdvapi32 -lGdi32 -lCrypt32"" 
OPENSSL_LIBS_DEBUG=-""-lssleay32 -llibeay32"" 
OPENSSL_LIBS_RELEASE=""-lssleay32 -llibeay32"" 

的可执行文件将没有工作openssl dlls现在。难道我做错了什么?

+0

执行此qt静态构建时需要考虑的一些问题 - 使用-LC:\ OpenSSL-Win32 \ lib没有MinGW目录时,编辑qt静态构建的powershell脚本时,必须执行两项操作 - 如上图所示为参数使用双引号,以便成功传递给configure.bat,同时我也无法在PowerShell脚本中插入换行符,所以我最终要到达一个正在出现的行的末尾,按住shift键然后按右箭头键选择换行符,然后通过我已经创建的换行符粘贴它 - 这是必要的使脚本工作 –

+0

此外,如果您必须静态重建QT,只需删除静态目录从头开始,一旦mingw静态qt构建完成后,您需要将openssl dll放在与exe相同的目录中。这是以前的线程的延续http://stackoverflow.com/questions/35442599/qt-https-ssl-support-for-static-qt-static-program-build-getting-protocol-htt –

回答

0

您正在与动态版本的OpenSSL进行链接。你应该用静态的,而不是链接:从耀眼的光芒制作

-L C:\OpenSSL-Win32\lib\MinGW\static 
+0

谢谢 - 唯一的mingw lib目录中的文件是libeay32.a libeay32.def ssleay32.a和ssleay32.def。也没有静态目录。 –

+0

@JoshOrenberg'.a'看起来像一个静态存档(一个'.o'文件的集合),但是在mingw中这不是一个给定的。也许你应该检查这些是导入库还是真正的静态库。如果它们不是静态的,那么你运气不好,需要自己静态构建openssl,或者找到它的另一个来源。 –

0

答:

的Dependency Walker将告诉你哪些DLL的可执行文件依赖。 MinGW库是使用VC++ DLL作为源代码的“内置”。 IIRC,没有静态的MinGW构建(为什么生成的.a文件是 如此巨大一直是我的一个谜)。