Error:(199) undefined reference to `__android_log_print'

最近在整合C和C++源文件,cpp目录下有多个子文件,然后如果是子目录出现有Android性质的元素时,就会报错。如下图所示

现在如果子目录里出现Android的LOG的日志时,就会报如下的一个错:

Error:(199) undefined reference to `__android_log_print'

但是我已经在gradle里添加了相应的语句了,还是不行。后来查阅了很多资料,也耗了整天时间,发现如果将所有文件打包成一个库,则不会报错,如果在同一个CMakeList文件里生成多个库的时候,就会报错。

 

解决办法有两种:

第一种就是和我前面所说的,将所有子目录的文件+根目录下所有的文件,都打进一个库里,这样就不会报错了,如下图红框所示,将video_srcs与native-lib打进同一个库。其实这个办法在实际项目中是个不错的办法,因为全部打成一个库,这样别人根据库名字及特征反编译出来就难很多了。所以推荐这个办法;

 

 

另一种就是打成多个库,即cpp目录下,根据逻辑的不同,分有多个子文件夹,然后每个子文件夹都打成一个包。如果这样的话,就必须在每个子文件夹下都对应有一个CMakeList文件才行,可以参考这位大佬的经验:

https://www.jianshu.com/p/f09dbaf72126

如上图所示,即可打包成多个库。

但实测我发现,如果这多个库有互相调用的情况下,会报一些无定义的错(但明明已经定义好的了)。这一点至今我还没弄明白,有哪位高手解决下吧= =

 

查阅资料时,在StackOverflow发现了一个有趣的贴子,就是使用GLOB_RECURSE可以实现根目录、子目录下所有同类的源文件自动添加,如下所示:

file(GLOB_RECURSE cpp_srcs_c "src/main/cpp/*.c")
file(GLOB_RECURSE cpp_srcs_cpp "src/main/cpp/*.cpp")

 

最后附上这个贴子的地址:https://stackoverflow.com/questions/45209369/android-cmakelist-add-multi-source-file

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值