swig 和 libcurl 在一起

swig and libcurl together

我正在学习制作 PHP 扩展,我发现了一个关于 swig 的博客 post。我尝试使用 libcurl 创建代码,但无法编译它。

%{
    #include <stdio.h>
    #include <curl/curl.h>

    bool wsper(char* url, char* postdata){
        CURL* curl = curl_easy_init();
        CURLcode res;
        if(curl){
            curl_easy_setopt(curl, CURLOPT_URL, url);
            curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata);
            curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
            curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
            res = curl_easy_perform(curl);
            if(res == CURLE_OK){
                curl_easy_cleanup(curl);
                return true;
            }else{
                return false;
            }
        }else{
            return false;
        }
    }
%}

%module wsper
extern bool wsper(char* url, char* postdata);

在运行执行以下命令后我没有遇到任何错误

swig -php file.c
g++ `php-config --includes` -fpic -lcurl -lcurlpp -c
wsper_wrap.c g++ -shared file_wrap.o -o file.so

但是当我尝试 运行 php 文件时,出现错误提示:

undefined symbol: curl_easy_perform in Unknown line 0

您的链接器扩充是错误的。您在使用 -c 调用 g++ 时使用 -lcurl -lcurlpp 调用它。

使用-shared 和-o 调用时需要使用-fpic -lcurl -lcurlpp file.so。

即最终链接应该是:

g++ -shared file_wrap.o -o file.so  -lcurl -lcurlpp