今天在移植一个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.cCoreUtils_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编译器时就报错了, 删除掉一行即可!

更多相关文章

  1. Android(安卓)kotlin 记录
  2. Android(安卓)OpenGL库函数列表
  3. android 开发 @override 编译错误 解决办法
  4. Android(安卓)BlueDroid(二):BlueDroid蓝牙开启过程init
  5. Android(安卓)事件分发机制
  6. Android(安卓)GridView的使用方法
  7. android从sdcard加载.9.png图片
  8. android handler.removeCallbacksAndMessages(null)的使用
  9. 箭头函数的基础使用

随机推荐

  1. MySQL主从之master_info_repository与syn
  2. js基础知识:变量与常量,函数及参数
  3. 复制远程服务器文件命令scp的使用
  4. 【JS基础入门】JavaScript原生Ajax请求与
  5. dom树元素的增删改查
  6. 【JavaScript案例】视口高度,元素位置、滚
  7. 0402作业
  8. uni-app,Vue 使用 filter 过滤或者替换 v
  9. 优盘提示位置不可用无法访问,磁盘结构损
  10. 数据可视化?不如用最经典的工具画最酷炫的