gpt4 book ai didi

c++ - Visual Studio 2013 中的 LibCurl 静态链接器错误,即使在包含必要的依赖项之后也是如此

转载 作者:太空宇宙 更新时间:2023-11-04 13:30:25 25 4
gpt4 key购买 nike

所以首先我会说我已经查看了很多地方都没有成功。

这个 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 和静态构建的发布和调试文件夹。在静态发布文件夹中,我只有 libcurl_a.lib。在 dll-release 文件夹中,我有 libcurl.dll、libcurl.lib 和 libcurl.pdb。

当从 dll-release 文件夹动态链接时,我已经成功构建了程序。但是,当我尝试从 static-release 文件夹静态链接时,我收到 11 个左右的链接器错误。

我还包含了 "libcurl_a.lib""wldap32.lib""ws2_32.lib""winmm.lib""libeay32.lib""ssleay32.lib" 作为依赖项。

除此之外,我还使用 NuGet 获取了 libssh2.1.4.3.1openssl.1.0.1.21zlib.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"

然而,尽管我从多个来源采取了所有这些步骤,包括本网站上的一些很好的答案,以及 PDF 和 LibCurl 网站上的一些答案,但我仍然遇到这些链接器错误。

例如,我认为其中一个错误具有轻微的指示性(抱歉,我无法从 VS2013 中复制并粘贴所有这些我能分辨的错误)说:

"error LNK2019: unresolved external symbol curl_easy_setopt referenced in function 'public:__cdecl Curler::Curler(char*)'(??0Curler@@QEAA@PEAD@Z)"

所有这些错误的布局都相似,指向某种类型的 __cdecl Curler 函数,错误代码为 LNK2019

无论如何,我的问题基本上是:我做错了什么?如果这是一个模糊的问题,或者如果您觉得这是重复的,我很抱歉。但我可以向你保证,我已经查看了大量的 Stack Overflow 问题列表和互联网的其他领域,但都没有成功,我开始感到非常迷茫。似乎对很多其他人有用的东西我就是无法开始工作。我认为很大一部分问题是我对 Windows 的陌生。如果有任何其他信息我可以提供以帮助您帮助我,那么我会很乐意提供。我真的很感激你能给我的任何帮助。谢谢。

最佳答案

首先感谢编辑我帖子的用户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 2013 中打开的 Visual Studio 解决方案。在 Visual Studio 中,我去了

Project Properties -> C/C++ -> Code Generation

并将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 文件。现在,在:

Project Properties -> Linker -> Input

我将 "libcurl_imp.lib""ws2_32.lib" 放在 Additional Dependencies 下。

正如我之前所说,我确保在 Preprocessor Definitions 中有 "CURL_STATICLIB"。我还将此项目的 Runtime Library 切换为 "Multi-threaded (/MT)"

毕竟,好了,编译成功了!出于某种原因,我需要复制 libcurl.dll,上述 Visual Studio 构建的 bagder 的 repo 将其复制到我的可执行路径中,以便解决方案真正起作用。但它似乎至少现在起作用了!

谢谢大家。希望这个答案能帮助其他像我一样偶然发现这个问题的人。

关于c++ - Visual Studio 2013 中的 LibCurl 静态链接器错误,即使在包含必要的依赖项之后也是如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31705338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com