2015-09-10 3 views
0

Я учусь создавать PHP-расширения, и я наткнулся на сообщение в блоге о swig. Я попытался создать код с libcurl, но я не могу его скомпилировать.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 в Unknown line 0

ответ

1

Ваш компоновщик дополняет ar неправильно. Вы вызываете g ++ с -lcurl -lcurlpp в том месте, где вы вызываете его с -c.

Вам нужно использовать -fpic -lcurl -lcurlpp, когда вы вызываете его с -shared и -o file.so.

т.е. окончательное связывание должно быть:

g++ -shared file_wrap.o -o file.so -lcurl -lcurlpp 
Смежные вопросы