首先,我会说我在很多地方都没有成功。
此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设备,而不需要libcurl或MySQL的dll(我也是静态链接)。
无论如何,在这个存储库的亲切帮助下:
https://github.com/blackrosezy/build-libcurl-windows
我能够在我的Windows设备上构建libcurl。在找到此存储库之前,这是一个艰难的过程。现在我有一个lib和一个include文件夹。在lib文件夹中,有dll和static build的发布和调试文件夹。在静态释放文件夹中,我只有libcurl_a.lib。在dll-release文件夹中,我有libcurl.dll,libcurl.lib和libcurl.pdb。
从dll-release
文件夹动态链接时,我已将程序设置为SUCCESSFULLY构建。但是,当我尝试静态链接静态释放文件夹时,我得到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
以及所有这些版本的redist版本。我在库目录中也包含了以下路径:
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"
。
然而,尽管我从多个来源采取了所有这些步骤,包括本网站上的一些很好的答案,以及LibCurl网站上的PDF和一些答案,我仍然有这些链接器错误。
作为一个例子,我觉得其中一个错误是有点指示性的(对不起,我无法复制并粘贴VS2013中的所有这些错误,我可以告诉):
&#34;错误LNK2019:未解析的外部符号curl_easy_setopt已引用 in function&#39; public:__ cdecl Curler :: Curler(char *)&#39;(?? 0Curler @@ QEAA @ PEAD @ Z)&#34;
所有这些错误都是类似的,指向某种__cdecl Curler
函数,错误代码 LNK2019 。
无论如何,我的问题基本上是:我做错了什么?如果这是一个模糊的问题,或者你觉得这是重复的话,我很抱歉。但我可以向你保证,我已经查看了大量的Stack Overflow问题以及互联网的其他方面但没有成功,我开始感到非常迷茫。似乎对许多其他人有用的事情我无法开始工作。我认为问题的很大一部分是我对Windows的新见解。如果我能提供任何其他信息以帮助您,那么我很乐意提供。我非常感谢你能给我的任何帮助。感谢。
答案 0 :(得分:0)
首先,感谢编辑我的帖子的用户Pawan;这是我的第一篇文章,他帮助社区达到了美学标准,所以我知道将来该怎么做。
无论如何,我想我解决了我的问题。这可能是一个边缘案例,但无论如何它对我有用。
过了一会儿,我决定使用Visual Studio为Win64构建libcurl。为此,我从这个有用的存储库中获取了代码:
https://github.com/bagder/curl
我克隆了它,然后导航到该目录。然后我运行了以下命令(这是在Powershell中,所以我使用了unix-esque命令,但我没有使用MinGW):
mkdir build
cd build
cmake .. -G "Visual Studio 12 2013 Win64"
这构建了一个Visual Studio解决方案,我可以在Visual Studio 2013中打开它。在Visual Studio中,我去了
项目属性 - &gt; C / C ++ - &gt;代码生成
并将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文件。现在,在:
项目属性 - &gt;链接器 - &gt;输入
我将"libcurl_imp.lib"
和"ws2_32.lib"
置于Additional Dependencies
下。
正如我之前所说,我确保"CURL_STATICLIB"
中有Preprocessor Definitions
。我还为此项目将Runtime Library
切换为"Multi-threaded (/MT)"
。
毕竟,好吧,它编译了!出于某种原因,我需要将前面提到的Visual Studio版本的bagder的repo复制libcurl.dll
复制到我的可执行路径中,以便解决方案实际工作。但它现在似乎至少在起作用了!
谢谢你们。希望这个答案能帮助像我一样偶然发现这个问题的其他人。