2015-07-29 2 views
1

Итак, сначала я скажу, что я искал в тоннах мест без успеха.LibCurl в Visual Studio 2013 Ошибки статического компоновщика даже после включения необходимых зависимостей

Это PDF, где я начал:
http://curl.haxx.se/libcurl/c/visual_studio.pdf
Это кажется устаревшим и не включает в себя инструкции для Статически библиотек. Или, по крайней мере, я пробовал следовать всем инструкциям без каких-либо успехов.

Я попытался следующие ответы в
Installing LibCurl on Visual Studio 2010
error LNK2019: unresolved external symbol libcurl Visual studio
Building libcurl library in Visual Studio 2008
и в других областях, но не добились никакого прогресса.

Я также скажу, что я НЕ являюсь пользователем Windows любым протяжением воображения. С этим я расскажу, что я сделал до сих пор.

Я портирую приложение, которое я сделал в среде Unix, в частности OSX. Я добился больших успехов, за исключением использования libcurl. Мне нужно статически связать LibCurl, чтобы исполняемый файл, созданный Visual Studio, мог быть перемещен на другие устройства Windows по мере необходимости, не требуя DLL для libcurl или MySQL (который я также связываю статически).

Во всяком случае, с милостивой помощью этого репозитория:
https://github.com/blackrosezy/build-libcurl-windows
я смог построить Libcurl на устройство Windows. Это был сложный процесс, прежде чем я нашел этот репозиторий. Теперь у меня есть папка lib и include. Внутри папки lib есть папки выпуска и отладки для dll и статические сборки. Внутри папки статического выпуска у меня есть только libcurl_a.lib. В папке dll-release у меня есть libcurl.dll, libcurl.lib и libcurl.pdb.

Я получил программу для УСПЕШНОЙ сборки при динамическом соединении из папки dll-release. Однако, когда я пытаюсь связать статически с папкой статического выпуска, я получаю 11 или около того ошибок компоновщика.

Я также включил "libcurl_a.lib", "wldap32.lib", "ws2_32.lib", "winmm.lib", "libeay32.lib" и "ssleay32.lib" как зависимостей.

В дополнение ко всему этому, я использовал NuGet, чтобы получить libssh2.1.4.3.1, openssl.1.0.1.21, zlib.1.2.8.1 вместе с переизданными версиями всех этих. Я включил следующие пути в моей библиотеке каталогов, а также:

path_to_libssh\build\native\lib\v110\Win32\Release\static\cdecl\<br> 
path_to_openssl\build\native\lib\v110\Win32\Release\static\cdecl\<br> 
path_to_zlib\build\native\lib\v110\Win32\Release\static\cdecl\<br> 

Я также поставил /include/ пути из этих папок в моем списке включают в себя каталоги.

В моих определениях препроцессора у меня есть "CURL_STATICLIB".

Однако, несмотря на все эти шаги, которые я взял из нескольких источников, включая отличные ответы на этом сайте, а также PDF-файлы и некоторые ответы на сайте LibCurl, у меня все еще возникают эти ошибки компоновщика.

В качестве примера, один из ошибок, которые я чувствую немного ориентировочный (жаль, что я не могу скопировать и вставить все эти ошибки из VS2013, что я могу сказать) говорит:

«LNK2019 ошибка: неразрешенный внешний символ curl_easy_setopt ссылки в функции 'общественности: __ Cdecl бигуди :: бигуди (символ *)' (?? 0Curler @@ QEAA @ PEAD @ Z)»

Все эти ошибки раскладывают так же, указывая на некоторые вид __cdecl Curler функция, с кодом ошибки LNK2019.

В любом случае, мой вопрос в основном: что я делаю неправильно? Мне жаль, если это неопределенный вопрос, или если вы чувствуете, что это повторение. Но я могу заверить вас, что я просмотрел большой список вопросов о переполнении стека и других областях Интернета без каких-либо успехов, и я начал чувствовать себя очень потерянным. Вещи, которые, похоже, работают для многих других, я просто не могу работать. Я думаю, что большая часть проблемы - это моя новизна к Windows. Если есть какая-либо другая информация, которую я могу предоставить, чтобы помочь вам помочь, я с радостью предоставил ее. Я очень ценю любую помощь, которую вы можете мне дать. Благодарю.

ответ

0

Прежде всего, спасибо пользователю Pawan, который редактировал мой пост; это был мой первый пост, и он помог составить эстетику с сообществом, чтобы я знал, что делать в будущем.

В любом случае, я думаю, что решил свою проблему. Скорее всего, это крошечный кейс, но он все равно работал для меня.

Через некоторое время я решил создать libcurl для Win64 с помощью Visual Studio. Чтобы сделать это, я схватил код из этого полезного хранилища:
https://github.com/bagder/curl

я клонировал его и переходите к этому каталогу. Затем я побежал следующие команды (это в Powershell, поэтому я использовал Unix-эск команды, но я не использовал MinGW для этого):

mkdir build 
cd build 
cmake .. -G "Visual Studio 12 2013 Win64" 

Это построил Visual Studio решение, которое я мог бы открыть в Visual Studio 2013 . в Visual Studio, я пошел в

Свойства проекта -> C/C++ -> Генерация кода

И переключил опцию Runtime Library в "Multi-threaded (/MT)"

Тогда я построил проект, выводимый следующие файлы по следующему пути:

path_to_pulled_code\build\lib\Release\libcurl.dll 
path_to_pulled_code\build\lib\Release\libcurl_imp.exp 
path_to_pulled_code\build\lib\Release\libcurl_imp.lib 

Итак, теперь я имел Lib файл мне нужно. Теперь в:

Свойства проекта -> Linker -> Input

Я поставил "libcurl_imp.lib" и "ws2_32.lib" под Additional Dependencies.

Как я уже говорил, я убедился, что у меня "CURL_STATICLIB" в Preprocessor Definitions.Я также переключил Runtime Library на "Multi-threaded (/MT)" для этого проекта.

После всего этого, ну, это скомпилировано! По какой-то причине мне нужно было скопировать libcurl.dll, что вышеупомянутая сборка Visual Studio из репозитория суммирования, сделанная в мой исполняемый путь, чтобы решение действительно работало. Но, похоже, сейчас он работает!

Спасибо, ребята. Надеюсь, этот ответ поможет любому, кто наткнулся на эту проблему, как я.