将静态libcurl添加到Code :: Blocks IDE

Jav*_*tar 10 c++ static codeblocks libcurl

我无法弄清楚如何正确地将静态libcurl库添加到我的Code :: Blocks IDE中.我希望它是静态的,因为在我的程序运行期间不需要默认情况下不包含在Windows中的.dll文件.我正在使用这个libcurl:http://curl.haxx.se/dlwiz/?type = lib&os = Win32&flav = - (没有OpenSSL的minGW)

以下是我的全局编译器设置:http://img845.imageshack.us/img845/1381/halpr.jpg

我收到以下错误:

ld.exe ||找不到-lCURL_STATICLIB | || ===构建完成:1个错误,0个警告=== |

编译此代码时:

include <stdio.h>
include <curl/curl.h>

int main(void)
{
CURL *curl;
CURLcode res;

curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://google.com");
res = curl_easy_perform(curl);

/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)

显然它没有找到CURL_STATICLIB,因为我不明白为什么.我甚至不确定是否需要将CURL_STATICLIB添加到我的链接器设置(我在其他论坛上阅读).我发现有些人有同样的问题,但在任何地方都没有正确回答:

stackoverflow.com/questions/4176503/frustrated-with-libcurl

forums.codeblocks.org/index.php?topic=11391.0

old.nabble.com/gcc-working-with-libcurl-td20506927.html

forums.devshed.com/c-programming-42/linker-error-using-libcurl-698071.html

我很厌倦与此斗争,请帮助我.

编辑:

你好Victor,谢谢你的回复!

我会尽量详细说明,所以没有任何误解.所以,这是我的C:\ libs \文件夹的目录/文件夹树的图像:

http://img199.imageshack.us/img199/6977/curl1.png

如您所见,它还包括构建日志,您会注意到此次错误与我之前发布的错误不同.这是因为我改变了全局编译器并构建了项目设置.

我的新Build Project设置:http://img863.imageshack.us/img863/4404/buildoptions.png 我新的全局编译器设置:http://img225.imageshack.us/img225/4926/curl2.png

我确信我已将这些设置配置错误,这就是我无法编译它的原因.

gre*_*olf 21

好的,我设法使用静态链接使用libcurl成功构建了您的示例.使这项工作所涉及的细节非常复杂 - 正确地设置它可能会让那些粗心大意变得棘手.

以下是我用来完成这项工作的步骤,请务必仔细遵循它们:

  1. 转到项目构建选项 - >编译器设置 - > #define:键入CURL_STATICLIB.当定义它时,libcurl.h头文件将对其函数签名进行预处理以适应静态链接.否则,假设动态链接,然后变形_imp__*.屏幕截图中未解决的错误表明它正在尝试动态链接而不是所需的静态链接.

  2. 项目构建选项 - >链接器设置 - >链接库下,确保它包含以下内容:curl,rtmp,idn,ssl,ssh2,crypto,z,ws2_32,wldap32,winmm,gdi32.请注意,订单很重要.由于gnu链接器的设计缺陷,需要首先列出最依赖的库,然后是最少依赖的库.像msvc link和borland的ilinker这样的连接器没有出现这样的问题 - 库可以按任何顺序列出.

  3. 项目构建选项 - >链接器设置 - >其他链接器选项下添加'-static'.这将确保使用静态版本的'idn'.如果省略此开关,那么您编译的程序可能依赖于'libidn-11.dll'来运行,这可能不是您想要的.

此时,您应该能够编译和链接libcurl程序而不会出现任何问题.值得一提的几件事,

  • 其他链接器选项下,不需要屏幕截图中的其他额外开关."libcurl.a"已经列出并被链接库覆盖.

  • 'libcrypto.a'似乎涵盖与'libeay32.a'相同的引用,因此只需要其中一个.然而,'libeay32.a'虽然尺寸较大,但会引起动态联系.如果您希望您的应用程序"完全自包含",请使用"libcrypto.a",而不是在屏幕截图中.

  • 如果您希望将来动态链接,只需将链接库下的"curldll"替换为列表,然后删除CURL_STATICLIBdefine.不需要额外的库(例如,ssl,idn,rtmp等),因为libcurl.dll已经涵盖了它们.

  • 您可以通过使用代码块的用户模板来避免新的libcurl程序的繁琐的错误设置.(例如,文件 - >新建 - >项目 - >用户模板)

希望这能一劳永逸地解决您对libcurl的任何构建问题.