【问题标题】:undefined reference to curl_global_init, curl_easy_init and other function(C)对 curl_global_init、curl_easy_init 和其他函数的未定义引用(C)
【发布时间】:2013-05-04 18:43:27
【问题描述】:

我正在尝试在 C 中使用 Curl。

我访问了Curl官方页面,并复制了示例源代码。

以下是链接: http://curl.haxx.se/libcurl/c/sepheaders.html

当我使用命令“gcc test.c”运行此代码时,

控制台显示如下消息。

/tmp/cc1vsivQ.o: In function `main':
test.c:(.text+0xe1): undefined reference to `curl_global_init'
test.c:(.text+0xe6): undefined reference to `curl_easy_init'
test.c:(.text+0x10c): undefined reference to `curl_easy_setopt'
test.c:(.text+0x12e): undefined reference to `curl_easy_setopt'
test.c:(.text+0x150): undefined reference to `curl_easy_setopt'
test.c:(.text+0x17e): undefined reference to `curl_easy_cleanup'
test.c:(.text+0x1b3): undefined reference to `curl_easy_cleanup'
test.c:(.text+0x1db): undefined reference to `curl_easy_setopt'
test.c:(.text+0x1e7): undefined reference to `curl_easy_perform'
test.c:(.text+0x1ff): undefined reference to `curl_easy_cleanup'

我不知道如何解决这个问题。

【问题讨论】:

    标签: c curl libcurl


    【解决方案1】:

    根据情况有多糟糕,您可能需要在 LDFLAGS 中的某处添加 -L/ 以让链接器知道库在哪里。 ldconfig 应该会在每次启动时拾取并找到它们,但在新机器上可能需要一点刺激,比如在 /etc/ld.so.conf 中添加一个目录。

    【讨论】:

      【解决方案2】:

      我有同样的问题,但我使用 g++ 和 make 文件。 这是一个链接器问题。 您需要在编译器和链接器上添加选项 -lcurl。 在我的制作文件中:

      CC ?= gcc
      CXX ?= g++
      CXXFLAGS += -I ../src/ -I ./ -DLINUX -lcurl  <- compile option
      LDFLAGS += -lrt -lpthread -lcurl      <- linker option
      

      杰拉德

      【讨论】:

        【解决方案3】:

        除了 Joachim Pileborg 的回答之外,请记住 gcc/g++ 链接对顺序很敏感,并且您的链接库必须遵循依赖它们的内容。

        $ gcc -lcurl test.c

        将失败,缺少与以前相同的符号。我之所以提到这一点,是因为我来到这个页面是因为忘记了这个事实。

        【讨论】:

        • 你能告诉我为什么gcc -lcurl test.c 会失败gcc test.c -lcurl 工作正常吗?
        • @Lane gcc -lcurl test.c 将失败,因为 gcc 按输入顺序链接文件,因此它无法引用 - 例如 curl_global_init - 在文件中出现在 test.c 之后。
        • 非常感谢这篇文章!!!!这挽救了我的一天。看完这篇文章后,我刚刚更改了链接库的顺序,我可以成功编译和链接。
        【解决方案4】:

        你没有链接到图书馆。

        使用外部库时,您必须链接

        $ gcc test.c -lcurl
        

        最后一个选项告诉 GCC 将 (-l) 与库 curl 链接。

        【讨论】:

        • @Accountantم 如果只有一个静态的curl 库,它将被静态链接。否则,如果它是动态的,那么它将被动态链接。
        猜你喜欢
        • 2015-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-12
        • 1970-01-01
        • 2019-10-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多