Android Native中Android.mk编译链接时命名冲突的问题

今天在移植一个Linux C程序到 Android 源码层时遇到一个问题,记录下来已备其他遇到此类问题的朋友查阅:
/home/***/android4.2/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-linux-androideabi/bin/ld: error: out/target/product/***/bn_mp_mul_2.o: multiple definition of 'mp_mul_2'
/home/***/android4.2/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-linux-androideabi/bin/ld: out/target/product/***/bnn_mp_mul_2.o: previous definition here

问题的提示很明显,就是在链接的时候发现有俩个.o文件中都生成了"mp_mul_2"这个函数名,导致了命名冲突。
但是我查阅了所有代码和库,只发现了一个声明mp_mul_2a的地方,即bnn_mp_mul_2.c中, 并且相同内容的makefile在Linux中编译时并没有报这个错误。
后来仔细的看看了连接错误,发现应该是bnn_mp_mul_2.c中的mp_mul_2函数和bnn_mp_mul_2.c中的mp_mul_2冲突了!
神奇吧,同一个文件中的同一个函数发生了冲突!!!
原来是原makefile中写了2次bn_mp_mul_2.c, 即:
...
CoreUtils_SRCS    += bn_mp_mul_2.c
CoreUtils_SRCS    += bn_mp_mul_2.c
...
对应到Android.mk中就是
...
$(SUPPORT_DIR)/bn_mp_mul_2.c \
$(SUPPORT_DIR)/bn_mp_mul_2.c \
...
这种方式使用GNU C编译器时没问题, 使用bionic C编译器时就报错了, 删除掉一行即可!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值