Как связать openssl `libeay32.dll` в windows - PullRequest
0 голосов
/ 04 февраля 2019

Я хочу создать библиотеку DLL из кода C, который зависит от OpenSSL.Я заметил, что с Anaconda я могу установить OpenSSL, и он также создает файлы .h и libeay32.lib и libeay32.dll.

Для создания DLL я использую MinGW и выполняю следующие команды:

gcc -std=c11 -fPIC -c -g -O2 -I "D:\Users\david\AppData\Local\Continuum\anaconda2\envs\py3\Library\include" file.h file.c -L "D:/Users/david/AppData/Local/Continuum/anaconda2/envs/py3/Library/lib" -Wl,--whole-archive -llibeay32 -Wl,--no-whole-archive

Затем, когда я запускаю

gcc -shared file.o -o libVRF.dll -L "D:/Users/david/AppData/Local/Continuum/anaconda2/envs/py3/Library/lib" -L "D:\Users\david\AppData\Local\Continuum\anaconda2\envs\py3\Library\bin" -Wl,--whole-archive -llibeay32 -Wl,--no-whole-archive

Я получаю

c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: D:/Users/david/AppData/Local/Continuum/anaconda2/envs/py3/Library/lib/libeay32.lib: member D:/Users/david/AppData/Local/Continuum/anaconda2/envs/py3/Library/lib/libeay32.lib(LIBEAY32.dll) in archive is not an object collect2.exe: error: ld returned 1 exit status

Почему это происходит?

Я также заметил, что у меня есть папка C:\Program Files (x86)\Intel\iCLS Client со многими .dll, включая libeay32.dll.Я попытался выполнить приведенную выше команду с небольшим изменением

gcc -shared file.o -o libVRF.dll -L "C:\Program Files (x86)\Intel\iCLS Client" -Wl,--whole-archive -llibeay32 -Wl,--no-whole-archive

, и я получил некоторые ошибки, такие как undefined reference to 'EVP_MD_CTX_new'.Я думаю, что это происходит из-за того, что мой код на C использует более старую версию openSSL, а эта libeay32.dll, вероятно, будет более новой.

Как заставить работать Анаконду libeay32.dll?Или как мне получить рабочий libeay32.dll?

...