Ошибка связи cURL с MinGW-w64 GCC на MSYS2

Я использую библиотеки MSYS2 и MinGW-w64, а также наборы инструментов (из pacman-репозитория ‘mingw32’) через среду mingw32_shell.bat.

Я использую пакет mingw32 / mingw-w64-i686-gcc; mingw32 упакованы с префиксом пути /mingw32Таким образом, двоичный файл gcc /mingw32/gcc, например.

У меня проблемы с подключением библиотек cURL с помощью g ++. Я установил mingw32 / mingw-w64-i686-curl. Он предоставляет /mingw32/include/curl/curl.h, /mingw32/lib/libcurl.a, /mingw32/lib/libcurl.dll.a и так далее. Хотя этот пакет не предоставляет curl.pc, -lcurl не работает. Итак, я бегу:

$ curl-config --cflags
-I/mingw32/include
$ curl-config --libs
-L/mingw32/lib -lcurl -lidn -lrtmp -lssh2 -lssl -lcrypto -lgdi32 -lssl -lcrypto -lwldap32 -lz -lws2_32
$ curl-config --static-libs
/mingw32/lib/libcurl.a -LC:/msys64/mingw32/lib -pipe -LC:/msys64/mingw32/lib -lidn -lrtmp -lssh2 -lssl -lcrypto -lgdi32 -lssl -lcrypto -lwldap32 -lz -lws2_32

Хорошо. я добавил -I/mingw32/include в CXXFLAGS в моем Makefile, и добавил /mingw32/lib/libcurl.dll.a аргументам g ++ в исполняемом целевом соединении в Makefile. (CXXFLAGS содержит -std=c++11 -fopenmp -O2 -g -I..)

Это не удалось.

main.o: In function `query':
C:\Users\Administrator\ngd\5/main.cc:80: undefined reference to `_imp__curl_easy_init'
main.o: In function `urlencode':
C:\Users\Administrator\ngd\5/main.cc:34: undefined reference to `_imp__curl_free'
C:\Users\Administrator\ngd\5/main.cc:29: undefined reference to `_imp__curl_easy_escape'
C:\Users\Administrator\ngd\5/main.cc:30: undefined reference to `_imp__curl_easy_escape'
main.o: In function `query':
C:\Users\Administrator\ngd\5/main.cc:88: undefined reference to `_imp__curl_easy_setopt'
C:\Users\Administrator\ngd\5/main.cc:93: undefined reference to `_imp__curl_easy_perform'
C:\Users\Administrator\ngd\5/main.cc:94: undefined reference to `_imp__curl_easy_cleanup'
collect2.exe: error: ld returned 1 exit status

(main.o из main.cc, который включает в себя использование curl / curl.h и curl.)

я добавил -DCURL_STATICLIBS -I/mingw32/include вместо CXXFLAGS, и /mingw32/lib/libcurl.a g ++ аргументы для исполняемого файла.

Не удалось снова.

main.o: In function `query':
C:\Users\Administrator\ngd\5/main.cc:80: undefined reference to `curl_easy_init'
main.o: In function `urlencode':
C:\Users\Administrator\ngd\5/main.cc:34: undefined reference to `curl_free'
C:\Users\Administrator\ngd\5/main.cc:35: undefined reference to `curl_free'
C:\Users\Administrator\ngd\5/main.cc:29: undefined reference to `curl_easy_escape'
C:\Users\Administrator\ngd\5/main.cc:30: undefined reference to `curl_easy_escape'
main.o: In function `query':
C:\Users\Administrator\ngd\5/main.cc:88: undefined reference to `curl_easy_setopt'
C:\Users\Administrator\ngd\5/main.cc:90: undefined reference to `curl_easy_setopt'
C:\Users\Administrator\ngd\5/main.cc:91: undefined reference to `curl_easy_setopt'
C:\Users\Administrator\ngd\5/main.cc:93: undefined reference to `curl_easy_perform'
C:\Users\Administrator\ngd\5/main.cc:94: undefined reference to `curl_easy_cleanup'
collect2.exe: error: ld returned 1 exit status

Что я сделал, чтобы изучить:

$ nm /mingw32/lib/libcurl.a
... (other files)
libcurl_la-escape.o:
...
00000340 T _curl_free
...
(end of libcurl_la-escape.o)
... (other files)

$ nm /mingw32/lib/libcurl.dll.a
... (other files)
d000018.o:
...
00000000 I __imp__curl_free
00000000 T _curl_free
...
(end of d000018.o)
... (other files)

Так что проблема в (я думаю) __imp__curl_free или же _curl_free определяется, в то время как компилятор требует _imp__curl_free или же curl_free,

Любое решение для этого, пожалуйста?

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]