Я учусь делать расширения PHP и наткнулся на пост в блоге о swig. Я пытался создать код с помощью 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, у меня появляется сообщение об ошибке:
неопределенный символ: curl_easy_perform в неизвестной строке 0
Ваш компоновщик неверен. Вы вызываете g ++ с -lcurl -lcurlpp в точке, где вы вызываете его с -c.
Вам нужно использовать -fpic -lcurl -lcurlpp, когда вы вызываете его с -shared и -o file.so.
Т.е. окончательная ссылка должна быть:
g++ -shared file_wrap.o -o file.so -lcurl -lcurlpp
Других решений пока нет …