• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

error: undefined reference to 'xxx)' collect

mysql 搞代码 4年前 (2022-01-09) 10次浏览 已收录 0个评论

作者:金良([email protected]) csdn博客:http://blog.gaodaima.com/u012176591 编译动态链接库时,出现了这样的错误: error: undefined reference to ‘xxx)’ collect2: ld returned 1 exit status 属性1. 我能肯定这与要调用动态库的Java文件没有任何

作者:金良([email protected]) csdn博客:http://blog.gaodaima.com/u012176591

编译动态链接库时,出现了这样的错误:

error: undefined reference to ‘xxx)’ collect2: ld returned 1 exit status

属性1.

我能肯定这与要调用动态库的Java文件没有任何关系,因为我把Java文件删除然后重新编译也是这样的错误。

属性2.

我也能肯定这绝不是因为我没有把要用到的头文件包括进来,而且我试着将另一个函数的头文件注释掉,提示的错误是:

error: ‘xxxxx’ was not declared in this scope

属性3.

当我把函数名称更改使其前后名称不一致时也提示错误:

error: ‘xxxxx’ was not declared in this scope

属性4.

甚至我把直接把这个函数写进要调用它的文件里,仍然是这样的错误。

属性5.

已确定不是Android.mk文件的问题

什么情况下会产生“error: undefined reference to ‘xxx)’ collect2: ld returned 1 exit status“的错误呢?不明白这个函数为什么这么特殊,唯独它出现这样的错误。

明明定义了这个函数,却出现了“error: undefined reference to”的错误?怪哉

方案1.

在网上查到这样一种解决方案,它是这样描述的:

在android.mk中加入 LOCAL_ALLOW_UNDEFINED_SYMBOLS := true

也就是说,对于找不到的函数,编译器将忽略它。

我勒个去,我写这个函数就是要它干活的,你忽略它,虽然编译时过关了,但是我调用这个函数时不还是找不到吗?我还不如直接把这个函数删掉。

方案2.

经过我仔细核对,层层排除,终于发现了问题所在。再次还原一下错误提示

in function render:/BitmapPlayerActivity.cpp:35: error: undefined reference to ‘BrightnessFilter(unsigned short*, long, unsigned char)’
collect2: ld returned 1 exit status
make.exe: *** [obj/local/armeabi/libAVIPlayer.so] Error 1

同时贴出出现错误的函数所在的文件BitmapPlayerActivity.cpp:

#ifdef __ARM_NEON__	void BrightnessFilter(		unsigned short* pixels,		long count,		unsigned char brightness)	{          	//具体内容忽略	}	static void neonBrightnessFilter(		unsigned short* pixels,		long count,		unsigned char brightness)	{         	//具体内容忽略	}#endif

你看出问题所在了吗?注意第01行和17行的宏#ifdef __ARM_NEON__与#endif,它们配合起来根据变量__ARM_NEON__之前是否被定义而选择编译它们之间的代码;不行的是,本工程中__ARM_NEON__未被定义,故函数BrightnessFilter(unsigned short*, long, unsigned char)未被编译,所以才出现了error: undefined reference的错误。

PS1.

需要注意的是,在同一个cpp文件里如果函数之间存在调用关系,一定要把被调用的函数写在要调用它的函数的前面,例如下面的文件编译时会提示如下错误:

jni/BrightnessFilter.cpp: In function ‘void BrightnessFilter(short unsigned int*, long int, unsigned char)’:
jni/BrightnessFilter.cpp:7:52: error: ‘genericBrightnessFilter’was not declared in this scope
make.exe: *** [obj/local/armeabi/objs/AVIPlayer/BrightnessFilter.o] Error 1

BrightnessFilter.cpp:

#include "BrightnessFilter.h"void BrightnessFilter(unsigned short* pixels,		long count,		unsigne<a>本文来源gao($daima.com搞@代@#码(网</a>d char brightness){		genericBrightnessFilter(pixels, count, brightness);//调用了genericBrightnessFilter(),但函数genericBrightnessFilter()在BrightnessFilter()函数之前并没有实现体,所以出错}static void genericBrightnessFilter(		unsigned short* pixels,		long count,		unsigned char brightness){	//函数体没有引用其他函数,具体内容略}

PS2.

jni/Android.mk:11: *** commands commence before first target. Stop.
这是因为Android.mk中LOCAL_SRC_FILES 加载文件时斜杠后有空格,删除即可。在另一处也可能出现类似错误,请参看Android编译ffmpeg遇到的问题、解决方法、相关文件和编译全过程


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:error: undefined reference to 'xxx)' collect

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址