CURL位于/ usr / include中,但仍然不会被g ++自动找到

时间:2013-01-09 04:25:21

标签: c++ curl g++

每次我想在我的一个C ++程序中使用CURL时,我必须将标记-lcurl作为标记添加到g++。使用Eclipse时,这可能会特别烦人。如果存在/usr/include/curl/curl.h,我需要做些什么才能使CURL始终位于g++的包含路径中?

3 个答案:

答案 0 :(得分:1)

tl; dr :您必须添加标记。


链接器需要libcurl,而不是编译器。编译器需要头;链接器需要lib。

为了简化一些事情,头文件告诉编译器稍后将定义声明。 libcurl实际上是定义它们的。

链接器不会猜测并检查要链接的内容(这样做会是一个可怕的想法)。您必须明确告诉它要链接什么(默认库除外)。特别是,链接器必须知道使用libcurl来查找curl.h布局的声明。没有libcurl,链接器缺少函数,因此无法生成完整的二进制文件。

我不熟悉Eclipse,但我很肯定它有一个选项,您可以指定其他库。是的,每个项目你都必须这样做一次,但这不应该是一个主要的开销。

答案 1 :(得分:1)

尝试在

中添加curl路径
  

属性 - > C / C ++一般 - >路径和符号:

答案 2 :(得分:1)

这就是C和C ++中链接的工作原理。

  1. 编译程序时,您需要包含头文件/usr/include/curl/curl.h。编译器执行此部分。头文件包含库接口的所有定义。

  2. 当您链接程序时,您可以在库/usr/lib/libcurl.so中链接,也可以在其命名的任何内容中进行链接。链接器执行此部分。该库包含可加载(用于动态库)或可链接(用于静态库)格式的实现。

  3. C和C ++语言无法指定应链接哪些库,因此您必须将-lcurl传递给链接器。这就是它的方式。

    C和C ++有一些扩展,允许您在源代码中编码库依赖项,例如#pragma comment和MSC,但据我所知,它们不受典型ELF工具链的支持。

    注意:实际上,-lcurl标志不适用于g++,而是适用于链接器ld。当您将-lcurl传递给g++时,g++会将其传递给链接器。