求助undefined是什么意思 reference to xxx'的问题

C++:&undefined&reference&to&XXX
undefined reference to
`XXX'这个错误经常遇到。有时候觉得很奇怪,即使有声明头文件,还是会报这样的连接错误。后来发现原因在于链接库的时候找不到它的实现函数,在使用g++编译中需要人为的指定链接库。
**********************************************************************************************
下面是一个简单的例子:
编译报错如下:
原因就是因为找不到函数体,解决的办法很简单,就是在编译中加入它的实现的文件,让编译器可以找到它的函数体:
**********************************************************************************************
当然,有时候使用系统的库函数,函数体的文件不一定好找,一般在使用文档中都会告诉该怎么样链接的,所以要果断的man起来。
在Unix中使用aio_read和curses就会出现这样的问题,包含了头文件,但是还是会报undefined reference
to的错误,正确的g++命令如下:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。更多内容如下:
Powered by
& 2013 &&&C语言求助:error: undefined reference to xxx的解决办法_百度知道
C语言求助:error: undefined reference to xxx的解决办法
h文件也include过,对应的Android编译时出现这个错误,但是对应的函数的定义就在这个,makefile里面也添加到了LOCAL_SRC_FILES下面。急用.c文件里
提问者采纳
/system/bin/ 下的binary ndk
是厂商定制的配置文件,放在framework下面的
若是在framwork下,按之前的经验,主要可能的原因:namespace造成.
请问能否说详细一点?namespace在什么状态会出现这个问题?谢谢!
厂商给您的code会很多??如果程式码没有商务问题,我可以帮您看一下。另外请问您的Android brench为??
目前手上代码库是一个完整的Android版本,从硬件驱动到上层应用都有,android 5.1的。由于信息安全方面的问题,代码不方便直接发出来……能否麻烦您告知一下比较常见的导致这类问题的原因?谢谢!
请检查header file文件内是否有引用下面的定义??#ifdef __cplusplusextern &C&{#endifxxxxxxxxxxxxxxxxxxx#ifdef __cplusplus}#endif
代码结构大致如下,a.h文件里没有找到您提到的定义/* a.c */#include &a.h&......X x =Y y = ...;x = f(y);X f(Y y) {...}/* a.h */X f(Y y);
a.h 内如果没有的话,请务必加上.ex : file name : a.h===========================#ifndef _A_H
#define _A_H
#ifdef __cplusplusextern &C&{#endif...(原始档案的内码)#ifdef __cplusplus}#endif#endif
// endof _A_H===========================
提问者评价
我试一下。非常感谢!
其他类似问题
为您推荐:
reference的相关知识
其他1条回答
贴上代码来给你看看
代码结构大致如下。麻烦帮忙看看,谢谢!/* a.c */#include &a.h&......X x =Y y = ...;x = f(y);X f(Y y) {...}/* a.h */X f(Y y);/* Android.mk */...LOCAL_SRC_FILES:= \
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁整理linux编译link出undefined reference’dlclose’错误解决办法-linux-操作系统-壹聚教程网整理linux编译link出undefined reference’dlclose’错误解决办法最近因为换工作又开始搞Linux服务器了,现在编译link的时候,出现“undefined reference’dlclose@xxx函数’”错误,现在我把解决这个错误的方法整理如下
对于linux我持中立态度,而且我认为linux这么多年发展比较慢的原因是因为桌面化做的不好或者不够好,所以我比较偏爱ubuntu。
由于以前项目是makefile的,我个人不是很喜欢makefile,因为他看起来比较费劲,而且编译完成后出现问题调试是个大难题,不是每个人都精通gdb,而且vi上手比较难。所以将工程转为codeblocks的cbp,本来想使用cmake的,但是觉得要写的比较多,于是作罢,毕竟代码不是跨平台的,windows下没法用。
编译完link的时候,报了一句 reference&dlclose@xxx函数&,不知道什么问题了,找主程过来看了下,说是dl库没有包进去,查了下dl库是用来做动态库加载的(dynamic load),项目用到了libmysqld.so,加了之后还是有问题,将-ldl链接选项改到最后才可以。
总结了下这些比较常见的undefined reference问题:
undefined reference to &dlerror&
undefined reference to &dlopen&
undefined reference to &dlerror&
增加-ldl链接选项 (-l是链接选项的前缀)
2.pthread库
undefined reference to &pthread_create&
undefined reference to &pthread_xxxx&
增加-lpthread链接选项
undefined reference to `clock_gettime&
增加-lrt链接选项
如果是使用codeblocks,可以再link option里加,不过因为依赖顺序的问题,如果link option里加了还是报错,直接在link file里添加pthread dl rt等即可
如果是你自己的库出现这undefined reference什么函数,先去查下库的源代码,看看具体问题。上一页:没有了 &&&&&下一页:相关内容16773人阅读
Linux下编译程序时,经常会遇到&undefined reference to XXX& 报错,
这里总结一些可能的原因和解决方案,给需要的朋友:
说道undefined reference error,先提一下Linux gcc链接规则:
链接的时候查找顺序是:
-L 指定的路径, 从左到右依次查找
由 环境变量 LIBRARY_PATH 指定的路径,使用":"分割从左到右依次查找
/etc/ld.so.conf 指定的路径顺序
/lib 和 /usr/lib (64位下是/lib64和/usr/lib64)
动态库调用的查找顺序:
ld的-rpath参数指定的路径, 这是写死在代码中的
ld脚本指定的路径
LD_LIBRARY_PATH 指定的路径
/etc/ld.so.conf 指定的路径
/lib和/usr/lib(64位下是/lib64和/usr/lib64)
一般情况链接的时候我们采用-L的方式指定查找路径, 调用动态链接库的时候采用LD_LIBRARY_PATH的方式指定链接路径.
另外注意一个问题,就是只要查找到第一个就会返回,后面的不会再查找. 比如-L./A -L./B -lx 在A中有libx.a B中有libx.a和libx.so, 这个时候会使用在./A的libx.a 而不会遵循动态库优先的原则,因为./A是先找到的,并且没有同名动态库存在
对于动态链接库,实际的符号定位是在运行期进行的.在编译.so的时候,如果没有把它需要的库和他一起进行联编,比如libx.so 需要使用uldict, 但是忘记在编译libx.so的时候加上-luldict的话,在编译libx.so的时候不会报错,因为这个时候libx.so被认为是一个库,它里面存在一些不知道具体实现的符号是合法的,是可以在运行期指定或者编译另外的二进制程序的时候指定.
如果是采用 g++ -Lpath -lx 的方式进行编译,链接器会发现所需要的uldict的符号表找不到从而报错,但是如果是程序采用dlopen的方式载入,由于是运行期,这个程序在这个地方就直接运行报错了.另外还有一种情况就是一个对外的接口在动态库中已经声明定义了,但是忘记实现了,这个时候也会产生类似的错误.
如果在运行期报出这样的错误,就要注意是否是由于某些库没有链接进来或者某些接口没有实现的原因产生
有了上述基础,不难看出,undefined reference error错误的原因是:
没有指定对应的库(.o/.a/.so) 使用了库中定义的实体,但没有指定库(-lXXX)或者没有指定库路径(-LYYY),会导致该错误,
连接库参数的顺序不对 在默认情况下,对于-l 使用库的要求是越是基础的库越要写在后面,无论是静态还动态
gcc/ld 版本不匹配 gcc/ld的版本的兼容性问题,由于gcc2 到 gcc3大版本的兼容性存在问题(其实gcc3.2到3.4也一定程度上存在这样的问题) 当在高版本机器上使用低版本的机器就会导致这样的错误, 这个问题比较常见在32位的环境上, 另外就在32位环境不小心使用了64位的库或者反过来64位环境使用了32位的库.
C/C++相互依赖和链接 gcc和g++编译结果的混用需要保证能够extern "C" 两边都可以使用的接口,在我们的64位环境中gcc链接g++的库还需要加上 -lstdc++,具体见前文对于混合编译的说明
运行期报错 这个问题基本上是由于程序使用了dlopen方式载入.so, 但.so没有把所有需要的库都链接上,具体参加上文中对于静态库和动态库混合使用的说明
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:416296次
积分:4944
积分:4944
排名:第2528名
原创:103篇
转载:60篇
评论:82条
(2)(1)(1)(1)(2)(1)(2)(2)(2)(2)(5)(1)(1)(2)(1)(1)(1)(2)(1)(1)(4)(3)(1)(6)(2)(2)(3)(3)(1)(3)(3)(3)(3)(1)(3)(3)(5)(1)(7)(2)(10)(5)(6)(8)(3)(11)(2)(8)(9)(6)(6)

我要回帖

更多关于 undefined symbol 的文章

 

随机推荐