2011-09-07 84 views
0

我在ubuntu的C++代碼下工作。我正在使用gsoap來連接到服務器。我已經獲得了所有的數據。我也成功連接到服務器。我仍然有一個問題。爲什麼需要在命令行中寫入:g ++ test_server.cpp -o testServ libgsoap ++。a。爲什麼我需要在我的命令行中包含libgsoap ++。a,如果我確實在我的文件夾中包含了所有依賴關係? 編輯:gsoap - 使用-lcrypt編譯

如果我不包括libgsoap ++一個命令行,我有:

undefined reference to `soap_embed' 
/tmp/ccyeN0df.o: In function `soap_serialize_string(soap*, char* const*)': 
TEST.cpp:(.text+0xb9de): undefined reference to `soap_reference' 
/tmp/ccyeN0df.o: In function `soap_out_string(soap*, char const*, int, char* const*, char const*)': 
TEST.cpp:(.text+0xba15): undefined reference to `soap_outstring' 
/tmp/ccyeN0df.o: In function `soap_in_string(soap*, char const*, char**, char const*)': 

回答

1

你需要告訴G ++要++用-lgsoap ++對libgsoap鏈接。

如果要鏈接到非系統範圍的libgsopa ++版本,則需要通過-L標誌指定g ++的庫路徑。

簡短說明:

你有鏈接時錯誤。編譯成功並生成了目標文件。在編譯期間,您「承諾」(通過包括gsoap包含文件)soap_serialize_string et al存在某處,目標代碼可用。

現在,鏈接器嘗試從該對象文件中生成可執行文件。它檢查目標文件中的所有「承諾」並嘗試解決它:用調用實際函數替換它。這個「實際功能」在哪裏存在?在你的情況下,它是libgsoap ++。a。

所以如果你不告訴鏈接器鏈接到libgsoap ++。a,promise只是保持承諾,並且你有未定義的引用。

+0

但o確實在我的.cpp文件中包含了所有依賴文件,其中包含:.h,.cpp文件(soap.h accpuntsoap.h ..)。爲什麼它不起作用? – sunset

+0

在包含文件中,您只能指定編譯時的依賴關係。您還需要鏈接到相應的目標代碼(本例中包含在共享庫中) –