【问题标题】:Library path for C++. Fail?C++ 的库路径。失败?
【发布时间】:2011-12-10 12:30:35
【问题描述】:

我试图在 Mac 上执行此代码。我已经安装了卷曲。当我搜索 curl 时,我可以在 /usr/include/curl/curl.h 下找到它。下面是我要运行的程序。取自here。

#include <iostream>
#include <curl/curl.h>

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

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

    /* always cleanup */
    curl_easy_cleanup(curl);
  }
  return 0;
}

当我尝试编译程序时。见下文。

g++ simple.cpp 
Undefined symbols:
  "_curl_easy_perform", referenced from:
      _main in cciFNPkt.o
  "_curl_easy_init", referenced from:
      _main in cciFNPkt.o
  "_curl_easy_setopt", referenced from:
      _main in cciFNPkt.o
  "_curl_easy_cleanup", referenced from:
      _main in cciFNPkt.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

发生了什么事?为什么程序找不到这个文件的路径?

我该如何解决?

【问题讨论】:

  • 您不仅要编译程序,还要尝试编译和链接它。如果您只想编译它,请将“-c”传递给 g++。它会编译程序,不会报错。

标签: c++ macos curl path header


【解决方案1】:

您忘记链接 libcurl 库:

g++ simple.cpp -lcurl

诸如&lt;curl/curl.h&gt;(通常)之类的头文件仅声明存在一组函数,但不包含实际函数。对于 OS X Lion 上的 curl,这些函数位于 libcurl(/usr/lib/libcurl.dylib,它指向 /usr/lib/libcurl.4.dylib)中。您需要告诉链接器(通过编译器前端)该库,这可以通过-lcurl 完成。

【讨论】:

  • 是的,你是对的。好的我想再问你一个,如果我想使用多个库怎么办?我必须一直使用这个参数吗?我怎么知道参数是什么。你能解释更多吗?谢谢。
  • 您使用的每个库的文档将解释如何使用它。它应该包括使用该库所需的任何编译器或链接器选项。
  • @Darth 如果你需要链接多个库,你需要通过-l&lt;library_name&gt; 告诉链接器/编译器前端。例如,如果您还需要链接 ncurses,则可以使用 g++ simple.cpp -lcurl -lncurses。
【解决方案2】:

程序确实找到了包含文件,但没有找到库文件。
库文件应该类似于 libcurl.dylib 或 libcurl.a
用它来链接它:

g++ simple.cpp -lcurl

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    • 1970-01-01
    • 2014-09-05
    • 2020-06-01
    • 2019-05-03
    相关资源
    最近更新 更多