android mk编译错误

本文解决了在编译过程中遇到的未找到库文件错误,详细分析了错误原因,并提供了检查和修正库文件名称的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



错误显示:
/home/lsp/workspace/xxx.cpp:104: undefined reference to `nutshell::NMBtDispatcher::NMBtDispatcher(nutshell::NMBtCallback*)'
/home/lsp/workspace/xxx.cpp:105: undefined reference to `nutshell::NMBtDispatcher::init()'
collect2: ld returned 1 exit status
make: *** [out/target/product/obj/EXECUTABLES/aaa_intermediates/LINKED/aaa] Error 1



/home/lsp/workspace/prebuilt/toolchains/arm-fsl-linux-gnueabi/4.6.2/bin/../lib/gcc/arm-fsl-linux-gnueabi/4.6.2/../../../../arm-fsl-linux-gnueabi/bin/ld: cannot find -ldispatcher.so
collect2: ld returned 1 exit status
make: *** [out/target/product/obj/EXECUTABLES/aaa_intermediates/LINKED/aaa] Error 1




造成上面错误一个简单的原因是因为缺库或路径,查看.cpp所包含的库和路径后,觉得没问题的话,


下面要检查的就是.cpp文件编译出来的MODELE名。下面解释下LOCAL_MODULE:



LOCAL_MODULE用来给每一个模块定义一个名字,这里的名字会传给NDK编译系统,然后加上lib前缀和.so后缀(例如:变成libhello.so);


但是如果你在定义的过程中,自己加上了lib前缀,则NDK在处理时就不会在加上lib前缀了(这样做是为了兼容Android系统的一些源码)。


那么问题来了,查看你的模块名字是不是没有加lib前缀,如果没有加的话,在NDK编译系统的话会自动加上,而你在其他地方用的时候,


用的是没有加上lib前缀的库,造成库找不到的错误。加上lib前缀在试试,如果再不行,就不知道了。




参考链接:http://blog.youkuaiyun.com/smfwuxiao/article/details/8530742
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值