为什么连接失败,即使nm找到符号?

时间:2018-01-12 05:54:39

标签: linux dynamic g++

当我编译演示main.cpp时,它失败了因为undefined reference to a_mtk_bt_service_init(),但我找到了符号

nm -D ./libmtk_bt_service_client.so|grep a_mtk_bt_service_init

它的输出是0000000000004098 T a_mtk_bt_service_init

我确信编译器通过使用命令aarch64-poky-linux-g++ -print-file-name=libmtk_bt_service_client.so -o main main.cpp

找到了正确的动态库

这是演示代码main.cpp

void a_mtk_bt_service_init();
int main()
{
   a_mtk_bt_service_init();
   return 0;
}

我的编译命令是

aarch64-poky-linux-g++ -mcpu=cortex-a72.cortex-a53+crypto -mtune=cortex-a72.cortex-a53 --sysroot=/home/sundq/code/newT9/T9-Amazon-Sdk/build/tmp/sysroots/aud8516-slc -o build/xx main.cpp -I../../include -lmtk_bt_service_client

1 个答案:

答案 0 :(得分:0)

答案在这里Call a C function from C++ code,也就是说,当c ++代码调用c函数时,我们还必须在声明c函数之前添加extern "C", 所以我的函数声明应该是这样的

extern "C" void a_mtk_bt_service_init();