Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: Сети
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/26: Рейтинг темы: голосов - 26, средняя оценка - 4.58
DmitryScaletta
2 / 2 / 2
Регистрация: 11.06.2013
Сообщений: 31
1

Curl и MS Visual C++ 2013 статическая линковка

08.03.2015, 18:09. Просмотров 5052. Ответов 14
Метки нет (Все метки)

Компилирую библиотеку из папки "curl-7.41.0\projects\Windows\VC12" (LIB Release).

Подключаю ее в проект с помощью:
C++
1
#pragma comment(lib,"libcurl.lib")
Получаю такие ошибки:
Код
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__curl_easy_strerror в функции _main
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__curl_easy_init в функции _main
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__curl_easy_setopt в функции _main
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__curl_easy_perform в функции _main
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__curl_easy_cleanup в функции _main
Почитав пункт 5.7 здесь: http://curl.haxx.se/docs/faq.html добавил CURL_STATICLIB в определения препроцессора.

В итоге при компиляции ошибок еще больше.
Кликните здесь для просмотра всего текста
1>LINK : warning LNK4098: библиотека по умолчанию "MSVCRT" противоречит использованию других библиотек; используйте параметр /NODEFAULTLIB:library
1>libcurl.lib(easy.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__WSAStartup@8 в функции _win32_init
1>libcurl.lib(telnet.obj) : error LNK2001: неразрешенный внешний символ "__imp__WSAStartup@8"
1>libcurl.lib(easy.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__WSACleanup@0 в функции _win32_cleanup
1>libcurl.lib(telnet.obj) : error LNK2001: неразрешенный внешний символ "__imp__WSACleanup@0"
1>libcurl.lib(telnet.obj) : error LNK2001: неразрешенный внешний символ "__imp__WSAGetLastError@0"
1>libcurl.lib(tftp.obj) : error LNK2001: неразрешенный внешний символ "__imp__WSAGetLastError@0"
1>libcurl.lib(ftp.obj) : error LNK2001: неразрешенный внешний символ "__imp__WSAGetLastError@0"
1>libcurl.lib(asyn-thread.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__WSAGetLastError@0 в функции _Curl_resolver_getaddrinfo
1>libcurl.lib(select.obj) : error LNK2001: неразрешенный внешний символ "__imp__WSAGetLastError@0"
1>libcurl.lib(sendf.obj) : error LNK2001: неразрешенный внешний символ "__imp__WSAGetLastError@0"
1>libcurl.lib(connect.obj) : error LNK2001: неразрешенный внешний символ "__imp__WSAGetLastError@0"
1>libcurl.lib(select.obj) : error LNK2019: ссылка на неразрешенный внешний символ ___WSAFDIsSet@8 в функции _Curl_poll
1>libcurl.lib(select.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__select@20 в функции _Curl_poll
1>libcurl.lib(select.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__WSASetLastError@4 в функции _Curl_wait_ms
1>libcurl.lib(connect.obj) : error LNK2001: неразрешенный внешний символ "__imp__WSASetLastError@4"
1>libcurl.lib(curl_addrinfo.obj) : error LNK2001: неразрешенный внешний символ "__imp__WSASetLastError@4"
1>libcurl.lib(sendf.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__recv@16 в функции _Curl_read_plain
1>libcurl.lib(connect.obj) : error LNK2001: неразрешенный внешний символ "__imp__recv@16"
1>libcurl.lib(sendf.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__send@16 в функции _Curl_send_plain
1>libcurl.lib(telnet.obj) : error LNK2001: неразрешенный внешний символ "__imp__send@16"
1>libcurl.lib(connect.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__bind@12 в функции _bindlocal
1>libcurl.lib(tftp.obj) : error LNK2001: неразрешенный внешний символ "__imp__bind@12"
1>libcurl.lib(ftp.obj) : error LNK2001: неразрешенный внешний символ "__imp__bind@12"
1>libcurl.lib(connect.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__closesocket@4 в функции _Curl_closesocket
1>libcurl.lib(connect.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__connect@12 в функции _singleipconnect
1>libcurl.lib(connect.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__getpeername@12 в функции _Curl_updateconninfo
1>libcurl.lib(connect.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__getsockname@12 в функции _Curl_updateconninfo
1>libcurl.lib(ftp.obj) : error LNK2001: неразрешенный внешний символ "__imp__getsockname@12"
1>libcurl.lib(connect.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__getsockopt@20 в функции _Curl_sndbufset
1>libcurl.lib(ftp.obj) : error LNK2001: неразрешенный внешний символ "__imp__htons@4"
1>libcurl.lib(connect.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__htons@4 в функции _bindlocal
1>libcurl.lib(curl_addrinfo.obj) : error LNK2001: неразрешенный внешний символ "__imp__htons@4"
1>libcurl.lib(smb.obj) : error LNK2001: неразрешенный внешний символ "__imp__htons@4"
1>libcurl.lib(telnet.obj) : error LNK2001: неразрешенный внешний символ "__imp__htons@4"
1>libcurl.lib(connect.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__ntohs@4 в функции _bindlocal
1>libcurl.lib(ftp.obj) : error LNK2001: неразрешенный внешний символ "__imp__ntohs@4"
1>libcurl.lib(connect.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__setsockopt@20 в функции _Curl_sndbufset
1>libcurl.lib(connect.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__socket@12 в функции _Curl_socket
1>libcurl.lib(connect.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__WSAIoctl@36 в функции _tcpkeepalive
1>libcurl.lib(curl_addrinfo.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__getaddrinfo@16 в функции _Curl_getaddrinfo_ex
1>libcurl.lib(curl_addrinfo.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__freeaddrinfo@4 в функции _Curl_getaddrinfo_ex
1>libcurl.lib(tftp.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__recvfrom@24 в функции _tftp_receive_packet
1>libcurl.lib(tftp.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__sendto@24 в функции _tftp_rx
1>libcurl.lib(ldap.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__ldap_init в функции _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__ldap_unbind_s в функции _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__ldap_set_option в функции _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__ldap_simple_bind_s в функции _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__ldap_search_s в функции _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__ldap_msgfree в функции _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__ldap_err2string в функции _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__ldap_first_entry в функции _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__ldap_next_entry в функции _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__ldap_first_attribute в функции _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__ldap_next_attribute в функции _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__ldap_get_values_len в функции _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__ldap_value_free_len в функции _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__ldap_get_dn в функции _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__ldap_memfree в функции _Curl_ldap
1>libcurl.lib(ldap.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__ber_free в функции _Curl_ldap
1>libcurl.lib(ftp.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__accept@12 в функции _AcceptServerConnect
1>libcurl.lib(ftp.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__listen@8 в функции _ftp_state_use_port
1>libcurl.lib(nonblock.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__ioctlsocket@12 в функции _curlx_nonblock
1>libcurl.lib(curl_gethostname.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__gethostname@8 в функции _Curl_gethostname

Далее добавляю msvcrt.lib в Project properties -> configuration properties -> linker -> input -> Ignore Specific Default libraries.

В итоге получаю те же самые ошибки, но без "LINK : warning LNK4098: библиотека по умолчанию "MSVCRT" противоречит использованию других библиотек; используйте параметр /NODEFAULTLIB:library"

Причем если компилировать DLL Release, и в папку с .exe файлом положить libcurl.dll, то всё работает.

Что я не так делаю?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2015, 18:09
Ответы с готовыми решениями:

Curl без ssl или статическая линковка
Здравствуйте. Создал дллку, статически прилинковал curllib, вот только курл потянул за собой пачку...

Статическая линковка Qt 5.3.2 под Visual Studio 2012
В общем я уже 2 дня парюсь с этой чушью и ничего толком не добился. У кого получается статически...

Статическая линковка VS динамическая линковка
Существует два типа линкования библиотек: статическое и динамическое. При статической линковке все...

Статическая линковка
Здравствуйте! Последние несколько дней пытаюсь собрать Qt для стат. сборки, безуспешно. Не даст-ли...

Статическая линковка в Qt 5.11
Собственно, сабж. Актуальна ли информация из важной темы...

14
Avazart
Эксперт С++
7951 / 5772 / 571
Регистрация: 10.12.2010
Сообщений: 26,501
Записей в блоге: 17
08.03.2015, 22:26 2
Блог: Библиотека libcurl в С++ для работы по HTTP

И последняя тема в списке Curl без ssl или статическая линковка
0
DmitryScaletta
2 / 2 / 2
Регистрация: 11.06.2013
Сообщений: 31
08.03.2015, 22:34  [ТС] 3
Цитата Сообщение от Avazart Посмотреть сообщение
Блог: Библиотека libcurl в С++ для работы по HTTP
Читал это. Информация там немного устарела. На офф сайте больше нет версии библиотеки для Win32 - MSVC.
Цитата Сообщение от Avazart Посмотреть сообщение
И последняя тема в списке Работа с CURL
-static в Visual Studio тоже можно прописать?
0
Avazart
Эксперт С++
7951 / 5772 / 571
Регистрация: 10.12.2010
Сообщений: 26,501
Записей в блоге: 17
08.03.2015, 22:37 4
Цитата Сообщение от DmitryScaletta Посмотреть сообщение
Читал это. Информация там немного устарела. На офф сайте больше нет версии библиотеки для Win32 - MSVC.
Да это я указал в комментариях в блоге

Смотрите:
Цитата Сообщение от Avazart Посмотреть сообщение
И последняя тема в списке Curl без ssl или статическая линковка
0
08.03.2015, 22:37
DmitryScaletta
2 / 2 / 2
Регистрация: 11.06.2013
Сообщений: 31
08.03.2015, 22:48  [ТС] 5
Цитата Сообщение от Avazart Посмотреть сообщение
Смотрите:
И последняя тема в списке Curl без ssl или статическая линковка
Так я делаю все по инструкции: статически собираю libcurl.lib, подключаю ее к проекту,
C++
1
#pragma comment(lib,"libcurl.lib")
но ничего не работает
0
Avazart
Эксперт С++
7951 / 5772 / 571
Регистрация: 10.12.2010
Сообщений: 26,501
Записей в блоге: 17
08.03.2015, 22:57 6
Значит libcurl.lib не тот копирнули или не туда копирнули..
0
DmitryScaletta
2 / 2 / 2
Регистрация: 11.06.2013
Сообщений: 31
08.03.2015, 22:57  [ТС] 7
Если собрать, как libcurl.lib + libcurl.dll то всё работает.
Но не хочется .dll файл всегда таскать за собой.
0
Avazart
Эксперт С++
7951 / 5772 / 571
Регистрация: 10.12.2010
Сообщений: 26,501
Записей в блоге: 17
08.03.2015, 22:58 8
Оно и так и так работает, проверено.
Просто будьте более внимательными.
0
DmitryScaletta
2 / 2 / 2
Регистрация: 11.06.2013
Сообщений: 31
08.03.2015, 23:03  [ТС] 9
Цитата Сообщение от Avazart Посмотреть сообщение
Значит libcurl.lib не тот копирнули или не туда копирнули..
Собирал в конфигурации "LIB Release". Без OpenSSL и прочего.
Получился libcurl.lib размером 3.16 MB
Положил его в папку с проектом, там же, где .sln и .vcxproj файлы.
В итоге получаю 43 ошибки при попытке компиляции (они в шапке под спойлером).
0
Avazart
Эксперт С++
7951 / 5772 / 571
Регистрация: 10.12.2010
Сообщений: 26,501
Записей в блоге: 17
08.03.2015, 23:03 10
Еще на заметку Curl с нуля
1
DmitryScaletta
2 / 2 / 2
Регистрация: 11.06.2013
Сообщений: 31
08.03.2015, 23:25  [ТС] 11
Цитата Сообщение от Avazart Посмотреть сообщение
Еще на заметку Curl с нуля
Наконец-то разобрался. Спасибо за помощь!

Вот рабочая версия самого простого примера программы. Может кому пригодится:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#define CURL_STATICLIB // используется статическая сборка библиотеки
 
#include <stdio.h>
#include <curl/curl.h>
 
#ifdef _DEBUG
#pragma comment(lib,"libcurld.lib")
#else
#pragma comment(lib,"libcurl.lib")
#endif
 
#pragma comment(lib,"ws2_32.lib")  // Зависимость от WinSocks2
#pragma comment(lib,"wldap32.lib")
 
int main(void)
{
    CURL *curl;
    CURLcode res;
 
    curl = curl_easy_init();
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "http://ya.ru");
 
        /* Выполнение запроса, res будет содержать код возврата */
        res = curl_easy_perform(curl);
        /* Проверка на ошибки */
        if (res != CURLE_OK)
            fprintf(stderr, "curl_easy_perform() failed: %s\n",
            curl_easy_strerror(res));
 
        /* Очистка */
        curl_easy_cleanup(curl);
    }
 
    system("pause");
 
    return 0;
}
0
Optimus11
5 / 5 / 0
Регистрация: 10.01.2017
Сообщений: 320
03.05.2019, 00:17 12
Цитата Сообщение от DmitryScaletta Посмотреть сообщение
Наконец-то разобрался. Спасибо за помощь!
...
Так как в итоге у Вас получилось собрать ?
У меня таже ошибка

Запускал командною строку VS2017, там указывал эту команду:

C++
1
nmake /f Makefile.vc mode=static VC=16
Поcле чего создалось три папки:
C++
1
2
3
libcurl-vc16-x86-release-static-ipv6-sspi-winssl
libcurl-vc16-x86-release-static-ipv6-sspi-winssl-obj-curl
libcurl-vc16-x86-release-static-ipv6-sspi-winssl-obj-lib
После чего в С/C++ --> Общие --> дополнительные каталоги включаемых файлов --> указал путь:
C++
1
C:\curl-7.64.1\builds\libcurl-vc16-x86-release-static-ipv6-sspi-winssl\include\
И Комопоновщик --> дополнительные каталоги библиотек --> указал путь:
C++
1
C:\curl-7.64.1\builds\libcurl-vc16-x86-release-static-ipv6-sspi-winssl\lib
Но все равно ошибка:
C++
1
2
Серьезность Код Описание    Проект  Файл    Строка  Состояние подавления
LNK2019 ссылка на неразрешенный внешний символ __imp__curl_easy_init в функции _main
0
Paul7
1 / 1 / 0
Регистрация: 10.04.2016
Сообщений: 1
04.05.2019, 16:27 13
Цитата Сообщение от Optimus11 Посмотреть сообщение
Так как в итоге у Вас получилось собрать ?
У меня таже ошибка
Построенные libcurl_a копируем в Release вашего проекта , libcurl_a_debug копируем в Debug вашего проекта .
Далее в фаиле реализации #define CURL_STATICLIB и #pragma comment(lib,"libcurl.lib") , не в коем случае не #pragma comment(lib,"libcurl_a.lib").
1
daxxoneagan
0 / 0 / 0
Регистрация: 25.05.2019
Сообщений: 3
26.05.2019, 04:25 14
На офф сайте больше нет версии библиотеки для Win32 - MSVC.
0
Avazart
Эксперт С++
7951 / 5772 / 571
Регистрация: 10.12.2010
Сообщений: 26,501
Записей в блоге: 17
26.05.2019, 13:45 15
Там кажется вообще только исходники есть.
0
26.05.2019, 13:45
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2019, 13:45

Qt 5.1.1 статическая линковка
Да, наверное такая тема часто проскальзывает, но я все равно не понял...(( Я начал изучать Qt и...

Статическая линковка
Всем привет. Я скомпилировал простую программу с помощью mingw64, набрав в консоли: У меня...

Статическая линковка?
Куку, хотелось бы узнать, можно ли как то упаковать программу(1.exe) и библиотеку (.dll), которую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.