2011-03-25 100 views
1

我已經實現升壓爲ASIO庫的教程示例克++,但用分離 - 通過一個頭文件:未定義的符號與

server.cpp

server.h

我建立與另一個的.cpp兩個文件文件採用以下方式:

g++ -I/usr/lib/jvm/java-6-openjdk/include -L/usr/local/lib -fPIC -lboost_system -shared -o libagent.so agent.cpp server.cpp 

當使用共享庫我編譯時,我得到:

java: symbol lookup error: ./libagent.so: undefined symbol: _ZN14tcp_connection6socketEv 

什麼似乎是這個錯誤的原因? ldd -d沒有給我任何依賴性遺漏。

+2

您可以在這裏把你的實際代碼在這個網站。這種方式更有用。 – Tim 2011-03-25 17:45:36

+1

您是否設置了LD_LIBRARY_PATH? – 2011-03-25 17:47:08

+0

@SB:是@Tim:好吧,我認爲這會代碼太多 – 2011-03-25 17:50:04

回答

1

你實際上並沒有鏈接到boost :: asio庫,因此共享對象不知道在哪裏可以找到你的類中使用的符號。

假設庫稱爲boost_asio,您需要添加:

-lboost_asio 

的連接線。

......從頭開始,完全錯誤。

你錯過了tcp_connection :: socket的實現 - 這是錯誤來自的地方。

也許行:

tcp::socket& socket(); 

在.h文件中需要讀取:

tcp::socket& socket() { return socket_; } 
+0

我找不到這個庫,也不是這樣命名的。 – 2011-03-25 18:09:30

+0

對不起,我認爲它被稱爲'boost_serialization' – Petesh 2011-03-25 18:13:55

+0

原來的答案是完全不正確的。 – Petesh 2011-03-25 18:18:56

1

最有可能的猜測是./libagent.so是使用不同的編譯器/設置/環境編譯的,名稱修改並不完全匹配。