【发布时间】:2017-07-10 16:22:47
【问题描述】:
我有一个 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
我不知道这里出了什么问题,那么任何人都可以阐明这个问题的潜在原因吗?
【问题讨论】:
-
在某处有
foo的定义吗?你给bar一个,这无关紧要。 -
@EugeneSh。是的,当然,
foo的定义在C应用程序代码中。 -
显示你的链接命令
-
等待 - 库调用应用程序? "在C++库中,有一个对C应用函数的函数调用:"
-
您是否尝试从库中调用可执行文件中的函数?那是行不通的。
标签: c++ c compilation linker runtime-error