2017-07-10 66 views
0

我有一個C++庫和一些C應用程序代碼。在C++庫,有一個函數調用C應用程序的功能:從C++庫代碼到C應用程序代碼:符號查找錯誤

源代碼在C++庫:

extern "C" { 
    void foo(); 
} 

... 
void bar() { foo();} 

而且在我的C代碼:

void foo() { 
... 
} 

而且符號表這兩個可執行文件:

readelf -sW C_application | grep foo 

71: 0000000000400b10 1159 FUNC GLOBAL DEFAULT 13 foo 

readelf -sW libcpp_library.so | grep foo 

11: 0000000000000000  0 NOTYPE GLOBAL DEFAULT foo 

但是,當我執行C應用程序如:

LD_PRELOAD="/home/asd/libcpp_library.so" ./C_application 

我得到了以下錯誤:

./C_application: symbol lookup error: /home/asd/libcpp_library.so : undefined symbol: foo 

我不知道這裏有什麼問題,所以任何人都可以擺脫對這一問題的潛在原因一些輕?

+0

有什麼地方有'foo'的定義?你給了一個'bar',這是無關緊要的。 –

+0

@EugeneSh。是的,當然,在'C'應用程序代碼中有'foo'的定義。 – computereasy

+1

顯示您的鏈接命令 – pm100

回答