Я уже понимаю, что так никто не делает, но мне все таки интересно сделать именно так.
Не собирать библиотеку в бинарный файл под конкретную IDE/компилятор, под конкретную ОС, с конкретными параметрами и зависимостями, а подключить к проекту именно исходные файлы библиотеки, ведь в них содержится вся реализация, правильно ??
Здравствуйте, Optimus1, Вы писали:
O>Естественно — этого не достаточно, а VS выдает ошибку "ссылка на неразрешённый внешний символ __imp__curl_easy_init в функции _main."
__imp__ как бы намекает что бы что нужна динамическая библиотека. Что бы это поправить следует заглянуть в header
Здравствуйте, Optimus1, Вы писали:
O>Здравствуйте,
O>Я уже понимаю, что так никто не делает, но мне все таки интересно сделать именно так.
Обычно как раз почти так и делают. Если проект должен под кучу платформ собираться,
то просто включают зависимости как "git submodule" или просто копированием исходников.
Правда после этого обычно добавляют что-то типа:
add_subdirectory(3rdparty/curl)
В главный `CMakeLists.txt` и потом уж из главного cmake генерируют
solution для VisualStudio и открывают его.
Хотя вроде теперь генерация не актуальна и VisualStudio умеет напрямую с CMakeLists.txt работать.
Re: Подключение исходных файлов к проекту - на примере Libcurl
Здравствуйте, Optimus1, Вы писали:
O>Естественно — этого не достаточно, а VS выдает ошибку "ссылка на неразрешённый внешний символ __imp__curl_easy_init в функции _main."
У кого-то тут на форуме была в подписи фраза "Your code should compile and link", последние два слова выделены. Собственно, при подключении любой сишной либы надо сделать эти два действия
1) Осчастливить компилятор
2) Осчастливить линкер
Как уже сказали выше, режимов сборки у любой библиотеки несколько. Минимум два варианта обычно: статическая или динамическая, сюда же докидываем второе измерение Debug/Release, а можно ещё и с выравниваниями данных поиграть, или хардварно-архитектурными вещами типа Little/big endian и т.п... И это не говоря про зависимости для самой библиотеки (какой рантайм подтянуть — виндовый или MinGW, какие сторонние либы надо, надо ли задружить разные системы сборки типа AutoTools, CMake...). Поэтому искусство собирать сложные вещи типа OpenSSL — это отдельный скилл, который тоже надо прокачивать.
Re: Подключение исходных файлов к проекту - на примере Libcurl
Здравствуйте, Optimus1, Вы писали:
O>Не собирать библиотеку в бинарный файл под конкретную IDE/компилятор, под конкретную ОС, с конкретными параметрами и зависимостями, а подключить к проекту именно исходные файлы библиотеки, ведь в них содержится вся реализация, правильно ??
O>Интересно то мне интересно, но не получается:
O>-Скачал исходники libcurl с их сайта: https://curl.se/download.html
O>-Создал свой проект в VS2019 и добавил туда все хедер файлы из папки libcurl/include.
Нужно ещё все .cpp-шники в проект добавить
Re[2]: Подключение исходных файлов к проекту - на примере Li
В общем сделал, как порекомендовал все таки qaz77 сделать в соседней теме.
Просто с помощью встроенного Native Tools Command Promt VS2019 собрал release/debud .lib.
Все работает.
Единственно, я попробовал самый первый простой пример — GET запрос HTML, пример почему то работает на всех сайтах. Хотя я вроде бы OpenSSL не подключал и https страничуи вроде бы не должны сервером отдаваться, что то не понятен мне этот момент.
Здравствуйте, Optimus1, Вы писали:
O>Единственно, я попробовал самый первый простой пример — GET запрос HTML, пример почему то работает на всех сайтах. Хотя я вроде бы OpenSSL не подключал и https страничуи вроде бы не должны сервером отдаваться, что то не понятен мне этот момент.
А в ответе-то что внтури? Может, там редирект или заглушка какая.
Re[4]: Подключение исходных файлов к проекту - на примере Li
Здравствуйте, Optimus1, Вы писали: O>а с этим каталогом оказывается уже собирается .lib с поддержкой Openssl.
Вот это вряд ли.
OpenSSL еще то монстр, он, конечно не содержится в каталоге curl ни в каком виде.
Как бы курл с ним собрался вот просто так?
Нет. У тебя скорее всего собралась версия с использованием Windows SSPI.
Это встроенный в винду криптопровайдер.
Это единственный вариант сборки курл, который не требует еще каких-то либов.
С Windows SSPI есть такая проблема, что на старых виндах (XP, Vista) не поддерживается
TLS 1.3, который требуют многие нынешние сервера.
Для своих проектов я в результате собирал курл с OpenSSL.
Но для этого надо собрать OpenSSL и подложить его хидеры и либы в определенное место относительно curl.
Re[6]: Подключение исходных файлов к проекту - на примере Li
Q>Нет. У тебя скорее всего собралась версия с использованием Windows SSPI. Q>Это встроенный в винду криптопровайдер. Q>Это единственный вариант сборки курл, который не требует еще каких-то либов.
Да, я опять термины перепутал
Все верно Windows SSPI.
Q>Для своих проектов я в результате собирал курл с OpenSSL. Q>Но для этого надо собрать OpenSSL и подложить его хидеры и либы в определенное место относительно curl.
Я попытался дополнительно собрать с поддержкой zlib.
Для этого собрал статический либ-файл (x32, debug), далее сделал как написано в инструкции, собрал дополнительно спараметрами:
WITH_ZLIB=static
ZLIB_PATH=path
Все собралось, создался файл — libcurl_a_debug.lib.
Подключил к проекту, запускаю libcurl`овский пример с параметром CURLOPT_ENCODING, чтобы проверить работу zlib, но опять супятся ошибки «неразрешенного символа»:
Ошибка LNK2019 ссылка на неразрешенный внешний символ _zlibVersion в функции _inflate_stream.
Ошибка LNK2019 ссылка на неразрешенный внешний символ _inflate в функции _inflate_stream.
Ошибка LNK2019 ссылка на неразрешенный внешний символ _inflateEnd в функции _exit_zlib
То есть в хедере эти функции/переменные есть, но в итоговом файле libcurl_a_debug.lib — их нет получается ??