从C ++库代码到C应用程序代码:符号查找错误

时间:2017-07-10 16:22:47

标签: c++ c compilation linker runtime-error

我有一个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

我不知道这里有什么问题,所以有人可以解释这个问题的潜在原因吗?

1 个答案:

答案 0 :(得分:-1)

您需要将您的功能导出为.so可用/可见。 详细说明可在此处找到:http://gcc.gnu.org/wiki/Visibility