我有一个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 appappation时:
LD_PRELOAD="/home/asd/libcpp_library.so" ./C_application
我收到以下错误:
./C_application: symbol lookup error: /home/asd/libcpp_library.so : undefined symbol: foo
我不知道这里有什么问题,所以有人可以解释这个问题的潜在原因吗?