2015-05-22 2 views
1

Я пытаюсь скомпилировать и запустить свой первый gsoap. Однако в моей основной() я получаю ошибку undefined reference to. Я поиск по сети, множество решений являются для Windows, .. Я программирования в Linux (CentOS) и используя Qt ..gsoap undefined reference in linux qt

Мой .pro файл:

TEMPLATE = app 
CONFIG += console 
CONFIG -= app_bundle 
CONFIG -= qt 

SOURCES += main.cpp \ 
    stdsoap2.cpp \ 
    soapC.cpp \ 
    soapClient.cpp 

HEADERS += \ 
    stdsoap2.h \ 
    soapStub.h \ 
    soapH.h \ 
    soapCountryInfoServiceSoapBindingProxy.h 

Я не дать ссылку на libgsoap++.a, потому что Я уже включил stdsoap2 в свой проект.

сообщение об ошибке:

/.1/Projects/calisma/soapCountries/main.cpp:47: error: undefined reference to `__ns1__ListOfLanguagesByCode(soap*, _i__ListOfLanguagesByCode*, _i__ListOfLanguagesByCodeResponse*)' 
:-1: error: collect2: ld returned 1 exit status 

Вот мой main.cpp, и я получаю сообщение об ошибке в строке __ns1__ListOfLanguagesByCode(soap, code, result);

main.cpp:

#include <iostream> 
#include "CountryInfoServiceSoapBinding.nsmap" 
#include "soapCountryInfoServiceSoapBindingProxy.h" 

int main() 
{ 
    CountryInfoServiceSoapBinding *countryObj; 

    struct soap *soap = soap_new(); 

    countryObj = (CountryInfoServiceSoapBinding *)malloc(sizeof(CountryInfoServiceSoapBinding)); 

    if(countryObj == NULL) 
    { 
     std::cout << "Cannot allocate memory for countryobj"; 
     exit(EXIT_FAILURE); 
    } 

    _i__ListOfLanguagesByCode *code; 

    code = (_i__ListOfLanguagesByCode *)malloc(sizeof(_i__ListOfLanguagesByCode)); 

    if(code == NULL) 
    { 
     std::cout << "Cannot Allocate Memory for code"; 
     exit(EXIT_FAILURE); 
    } 

    _i__ListOfLanguagesByCodeResponse *result; 

    result = (_i__ListOfLanguagesByCodeResponse *)malloc(sizeof(_i__ListOfLanguagesByCodeResponse)); 

    if(result == NULL) 
    { 
     std::cout << "Cannot Allocate Memory for result"; 
     exit(EXIT_FAILURE); 
    } 

    code = (_i__ListOfLanguagesByCode *)("tur"); 

    __ns1__ListOfLanguagesByCode(soap, code, result); 

    std::cout << "result = " << result << std::endl; 

    return 0; 
} 

Я не мог понять, где находится моя ошибка или какая-то часть, которую мне не хватает. В принципе, я хочу дать код (который является «тур» в моем примере) и увидеть результат службы.

Любая помощь будет оценена по достоинству.

EDIT: Вот список всех CPP и .h файл в проект ..

[email protected] soapCountries]$ ll 
total 1408 
-rw-rw-r-- 1 mg papilon 560 May 22 10:04 CountryInfoServiceSoapBinding.nsmap 
-rw-rw-r-- 1 mg papilon 1220 May 22 13:00 main.cpp 
-rw-rw-r-- 1 mg papilon 1135 May 22 13:21 main.cpp.autosave 
-rw-rw-r-- 1 mg papilon 707557 May 22 10:04 soapC.cpp 
-rw-rw-r-- 1 mg papilon 48024 May 22 10:04 soapClient.cpp 
-rw-rw-r-- 1 mg papilon 373 May 22 10:04 soapClientLib.cpp 
-rw-rw-r-- 1 mg papilon 252 May 22 12:58 soapCountries.pro 
-rw-rw-r-- 1 mg papilon 17907 May 22 15:02 soapCountries.pro.user 
-rw-rw-r-- 1 mg papilon 7148 May 22 12:01 soapCountryInfoServiceSoapBindingProxy.h 
-rw-rw-r-- 1 mg papilon 151092 May 22 10:04 soapH.h 
-rw-rw-r-- 1 mg papilon 39137 May 22 10:04 soapServer.cpp 
-rw-rw-r-- 1 mg papilon 373 May 22 10:04 soapServerLib.cpp 
-rw-rw-r-- 1 mg papilon 49034 May 22 10:04 soapStub.h 
-rw-r--r-- 1 mg papilon 311882 Jun 6 2004 stdsoap2.cpp 
-rw-r--r-- 1 mg papilon 56325 Jun 6 2004 stdsoap2.h 

EDIT 2:

Определение Int __ns1__ListOfLanguagesByCode, который расположен внутри "soapCountryInfoServiceSoapBindingProxy.h"

virtual int __ns1__ListOfLanguagesByCode(_i__ListOfLanguagesByCode *i__ListOfLanguagesByCode, _i__ListOfLanguagesByCodeResponse *i__ListOfLanguagesByCodeResponse) { return soap ? soap_call___ns1__ListOfLanguagesByCode(soap, endpoint, NULL, i__ListOfLanguagesByCode, i__ListOfLanguagesByCodeResponse) : SOAP_EOM; } 
+0

Вы добавили все файлы, созданные gsoap? Я думаю, что он генерирует больше файлов (например, файл cpp для bindingproxy). Также найдите в файле cpp __ns1__ListOfLanguagesByCode функцию – demonplus

+0

@demonplus, пожалуйста, см. Edit .. Я написал все файлы cpp и .h, которые включены в проект – goGud

+0

, вы могли бы найти функцию __ns1__ListOfLanguagesByCode в любом из этих файлов cpp? – demonplus

ответ

0

Я думаю, что в вашем файле .pro нужно добавить следующую строку: LIBS + = -lgsoap

+0

Я думаю, что библиотека lgsoap для окон. Но, как я уже говорил, я использую Linux. В моей папке gsoap у меня есть libgsoap ++. A (я думаю, что это так же, как lgsoap в windows). Однако добавление этой библиотеки в файл .pro ничего не изменило. Также, как я понимаю из книги guelap manuel, мне не нужно включать эту библиотеку, потому что я уже добавляю stdsoap2.cpp и .h файлы в моем проекте. – goGud

+0

на Windows вы никогда не включаете gsoap. Gsoap используется только для генерации файлов, а затем файлы включены. – demonplus

+0

может попробовать #locate libgsoap ++. A или #locate stdsoap2.a и добавить этот путь к вашим PATH и LD_LIBRARY_PATH? –