Я хочу создать библиотеку 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
?