首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Php扩展:未定义的符号: curl_easy_setopt在第0行中未知

Php扩展:未定义的符号: curl_easy_setopt在第0行中未知
EN

Stack Overflow用户
提问于 2015-02-11 02:01:58
回答 1查看 775关注 0票数 0

我正在编写一个php扩展,当我运行时,我得到了一个错误:

代码语言:javascript
复制
undefined symbol: curl_easy_setopt in Unknown on line 0

这是我的功能,包括卷发

代码语言:javascript
复制
std::string MyLib::download_file(std::string url) {
    std::string buffer;
    CURL *curl;
    CURLcode res;

    curl_global_init(CURL_GLOBAL_ALL);
    curl = curl_easy_init();

    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); 
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_writer);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
        curl_easy_setopt(curl, CURLOPT_AUTOREFERER, 0L);
        curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 0L);
        curl_easy_setopt(curl, CURLOPT_HEADER, 0L);

        res = curl_easy_perform(curl);
        if (res != CURLE_OK) {
            return "";
        }
        curl_easy_cleanup(curl);
    }
    curl_global_cleanup();

    return buffer;
}

在头文件中:

代码语言:javascript
复制
#include <curl/curl.h>

请帮帮我

**这是编译器命令和curl版本

代码语言:javascript
复制
g++ -Wall -c -O2 -std=c++11 -fpic `php-config --includes`  -L/usr/lib64/libcurl.so.4 -lcurl  -o  main.o main.cpp

我试过:

代码语言:javascript
复制
 g++ -Wall -c -O2 -std=c++11 -fpic `php-config --includes`  -L/usr/lib64 -lcurl  -o  main.o main.cpp

但这是一样的

土地退化和干旱:

代码语言:javascript
复制
[root@extension]# ldd myextension.so
linux-vdso.so.1 =>  (0x00007fff550b2000)
libphpcpp.so => /usr/lib/libphpcpp.so (0x00007f6b375b1000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f6b372aa000)
libm.so.6 => /lib64/libm.so.6 (0x00007f6b37026000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f6b36e10000)
libc.so.6 => /lib64/libc.so.6 (0x00007f6b36a7b000)
/lib64/ld-linux-x86-64.so.2 (0x0000003b62e00000)

卷曲版本:

代码语言:javascript
复制
[root@extension]# curl-config --version
libcurl 7.19.7
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-11 02:14:52

您正在编写一个c++程序,使用c库只需添加以下内容

代码语言:javascript
复制
extern "C" {
    #include <curl/curl.h>
}

在c++函数中,名称被损坏以反映它们所使用的参数,因此它使得重载函数成为可能,带有extern "C"libcurl.so强制编译器使用c链接,从而防止名称损坏。

您还需要将生成的二进制文件与libcurl链接,因为您需要添加

代码语言:javascript
复制
-lcurl

到编译器命令。

编辑:我注意到你有这个

代码语言:javascript
复制
-L/usr/lib64/libcurl.so.4 -lcurl 

这是错误的,让它与正确的

代码语言:javascript
复制
-L/usr/lib64 -lcurl
  • -L指定库的搜索路径。
  • -l您指定了soname,它将在用-L指定的路径上找到。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28445347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档