今天,简单讲讲android



error: undefined reference to 的错误分析。

昨天,做jni,连接so库时,android studio出现了这个问题。当时不知道是什么原因,后来,查找资料,总算解决了。这里记录一下。

一般编译器报 “undefined reference to”的错误是以下几种情况,Android中的makefile是Android.mk命名的。

1 没有指定对应的库(.o/.a/.so)

使用了库中定义的实体,但没有指定库(-lXXX)或者没有指定库路径(-LYYY),会导致该错误,

在Android.mk中 用LDFLAGS参数来定义库(-lXXX)和 (-LYYY)的

2 连接库参数的顺序不对

在默认情况下,对于-l 使用库的要求是越是基础的库越要写在后面,无论是静态还动态

我在实际使用的过程中,发现-D参数的使用,也会导致“undefined reference to”的错误,推荐大家如果想在做宏控制的时候,把-D参数放到最后

3 gcc/ld 版本不匹配 
gcc/ld的版本的兼容性问题,由于gcc2 到 gcc3大版本的兼容性存在问题(其实gcc3.2到3.4也一定程度上存在这样的问题) 当在高版本机器上使用低版本的机器就会导致这样的错误, 这个问题比较常见在32位的环境上, 另外就在32位环境不小心使用了64位的库或者反过来64位环境使用了32位的库.

这个问题与Linux下几乎一样

4 C/C++相互依赖和链接 
gcc和g++编译结果的混用需要保证能够extern "C" 两边都可以使用的接口,在我们的64位环境中gcc链接g++的库还需要加上 -lstdc++,具体见前文对于混合编译的说明 。

在extern “C”的使用时候,因为我经常需要用JNI链接纯C语言的库,我有时候加上extern "C" 还是不行,后来我才发现,extern "C" 必须要包含了头文件,我在这个问题上纠结了很久,惭愧。

5 运行期报错

这个问题基本上是由于程序使用了dlopen方式载入.so, 但.so没有把所有需要的库都链接上,具体参加上文中对于静态库和动态库混合使用的说明

关于执行时动态链接的问题,我也碰到过很纠结的情况,就是在Android链接的库依赖于我现在当前的库,就变成了你链接我,我再链接你,导致死都编不过,最好撇清这种关系

我的问题就是依赖库的顺序不对,导致出现error: undefined reference to 。后来修改了依赖的顺序,问题就解决了。这里,只需注意最基本的so库依赖在最前面,其他不依赖其他so的库依赖在后面。

android error: undefined reference to 的错误分析就讲完了。

就这么简单。

android error: undefined reference to 的错误分析相关推荐

  1. 【错误记录】Android NDK 错误排查记录 ( error: undefined reference to | Linking CXX shared library FAILED )

    文章目录 一. 报错信息 二. 错误分析 三. 错误总结 一. 报错信息 报错信息 : Build command failed. Error while executing process Y:\0 ...

  2. Android系统编译so库提示error undefined reference to '__android_log_print问题的解决

    在系统源代码的hardware/qcom下增加psam文件夹,编译源代码要生成libpsam.so库,Android.mk内容 LOCAL_PATH := $(call my-dir) include ...

  3. error: undefined reference to ‘typeinfo for android::RefBase‘ hidl_death_recipient

    HIDL设置死亡通知时出现错误: typeinfo for android::hardware::hidl_death_recipient: error: undefined reference to ...

  4. error undefined reference to __android_log_print

    error undefined reference to '__android_log_print 配置 Android.mk文件 输入 LOCAL_LDLIBS := -llog 打印日志库 注意: ...

  5. 解决Error: undefined reference to `__android_log_print'

    解决Error: undefined reference to `__android_log_print'     最近在使用Android Studio进行NDK开发时,程序本身是没有问题,但一旦添 ...

  6. jni/../../Classes/AppDelegate.cpp:29: error: undefined reference to 'StartLayer。而且没生成libgame.so文件...

    分类:cocos2d-x环境搭建常见问题2014-01-23 15:05304人阅读评论(0)收藏举报 <1>报错. G:/AndroidCocos2dxFile/android-ndk- ...

  7. 【Qt】error: undefined reference to `vtable for MainWindow‘

    1.问题描述 在写一个demo时,想尽量简单,就把MainWindow类的定义和实现都写在main.cpp中,结果编译时报错: main.cpp:-1: error: undefined refere ...

  8. 【Qt】报错error: undefined reference to `vtable for的解决方法

    1.问题描述 编译Qt程序时,在某个类构造函数定义处报错: error: undefined reference to `vtable for 2.原因分析 导致错误信息的原因是:子类没有实现父类的纯 ...

  9. 【ffmpeg】编译时报错:error: undefined reference to `av...

    1.问题描述 昨天使用ffmpeg库编译demo一切正常,今天再次链接ffmpeg库时报了一堆错误: error: undefined reference to `av_frame_alloc()' ...

最新文章

  1. 《巴伦周刊》:纳德拉带领微软中兴
  2. Java中的Atomic包
  3. jQuery ajax 和 普通js ajax 笔记
  4. qt中tinyxml2的基本使用方法
  5. 百度云域名解析如何添加? - [未完待续]
  6. Go中error类型的nil值和nil
  7. 4.1 软件开发生命周期模型
  8. varnish02 代理多台后端服务器
  9. SDL如何嵌入到QT中?!
  10. xml property标签注入一个类变量_依赖注入的学习
  11. OAuth2通过token访问资源服务器
  12. 答疑解惑:软件定义存储常见问题
  13. Android JTT 808-2011 道路运输车辆卫星定位系统终端通讯协议及数据格式
  14. Swagger与其他API文档编写工具对比
  15. JSON 是什么?JSON 介绍
  16. cos和sin的使用
  17. 消防管件做的机器人图片_消防管道配件制成机器人
  18. Golang-RSA加密解密-数据无大小限制(gophp)
  19. SpringCloud组件:Ribbon的负载均衡策略及原理
  20. 【计算机视觉】图像分割与特征提取——基于Roberts、Prewitt、Sobel算子的图像分割实验

热门文章

  1. VS2010/MFC编程入门之五十三(Ribbon界面开发:为Ribbon Bar添加控件)
  2. NSArray ----NSMutableArray
  3. 创造包容的环境和上升空间
  4. step2 . day7 C语言阶段小的项目总结
  5. loj #6235. 区间素数个数
  6. 201621123021《JAVA程序设计》第五周学习总结
  7. 设计模式——模版方法
  8. 【vijos】【二叉树】FBI树
  9. iOS设计模式 - 命令模式
  10. Jmeter初学(一)