使用g++编译C/C++程序,链接时出现undefined reference to错误
来源:互联网 发布:js文件怎么编写使用 编辑:程序博客网 时间:2024/05/28 05:16
原文链接:http://armsword.com/2013/11/10/undefined-reference-to.html
题目说是g++编译C/C++程序,其实是我这个程序是C、C++混着用的,这是错误的根源,弄了几个小时才发现问题根源,记录下吧:
通常链接时出现 undefined reference to 错误,一般是以下原因造成的:
1.链接时缺失相关目标文件(.o)
此时,注意缺少的目标文件或者相对应.c/cpp文件是否是跟在gcc语句后面
2.链接时缺少相关的库文件(静态库或动态库)
这个一般是动态库出问题,可以用ldconfig查看下,并且gcc链接语句里要有相应的.a或.so文件。
3.库文件链接顺序出错
这个其实看函数调用顺序吧,调用函数的顺序与库文件相同。
4.在C++中链接C语言相关的库
在C++中直接调用C语言库的函数,会导致出现undefined reference to错误,这是因为C++要对函数名重新命名(与C不一样),导致找不到C语言函数,所以需要在包含的头文件里包含extern “C” 。
本来我以为第四种是我今天问题出现的主要原因,我在main函数里调用其他函数,出现了 undefined reference to 错误,详情如下:
undefined reference to `looptopo(char*, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, char const*)'因为我调用了mysql以及net-snmp,这些是C函数库,链接时候可能会找不到对应的函数,但是,我更改后(添加了extern “C”)也没解决,更改方法如下:
但是,这样依然没解决问题,并且第四种如果出问题,也应该不会报我自己定义的函数未找到,后来仔细查找,终于找到了问题所在。主要原因是函数声明与定义不一致导致的:
头文件里声明:
int looptopo(char *topoip,vector<string> &vector_type,const char *mib_type);
函数定义:
int looptopo(char *topoip,vector<string> &vector_type,char *mib_type){//省略}
你会发现头文件里函数声明,第三个参数与定义不一样,一个为const,一个为no-const,将函数定义改为如下,问题解决:
int looptopo(char *topoip,vector<string> &vector_type,const char *mib_type)
我想了想,这种情况产生的原因,因为第三个参数的实参是const类型,而声明也是const类型,所以函数编译时候是不会报错的,但是链接时候,因为C++ 是可以函数重载的,所以找不到对应的函数,导致报错。
0 0
- 使用g++编译C/C++程序,链接时出现undefined reference to错误
- 在liunx编译C语言程序出现Undefined reference to pthread_create in Linux 错误*
- 编译链接错误undefined reference to
- 编译c文件出现undefined reference to `__gxx_personality_v0'
- 编译c文件出现undefined reference to `__gxx_personality_v0'
- 【网络SOCKET编程】DEV-C/C++ 编译时出现undefined reference to `WSAStartup@8'等错误解决办法
- NDK编译出现undefined reference to错误
- keil_5编译C程序时出现“P1 undefined identifier“错误
- undefined reference to 链接错误
- 编译tslib1.4出现错误undefined reference to rpl_malloc错误
- ubuntu上在使用c/c++连接mysql时,出现undefined reference错误解决办法
- 使用muduo编译链接错误 undefined reference to `muduo::ThreadPool::run(boost::function<void ()()>&&)'
- TORNADO下编译出现undefined reference to `itoa'错误
- 编译出现这种错误 undefined reference to '__gxx_personality_v0'
- 交叉编译中出现的 'Undefined reference to __aeabi_read_tp' 错误
- 编译什么时候出现Undefined reference to 的错误
- linux编译出现undefined reference to `pow‘的错误
- 编译WU FTPD出现"undefined reference to crypt"错误解决方法
- 结构-04. 通讯录的录入与显示(10)
- 黑马程序员_集合1
- rails disable not need connect database,disable active_record
- org.hibernate.MappingException: Repeated column in mapping for entity
- 20140612_Time-Series Data Mining
- 使用g++编译C/C++程序,链接时出现undefined reference to错误
- 结构-05. 有理数均值(20)
- 黑马程序员-随笔
- 【经验小谈】百度定位api使用 百度定位demo 百度地图快速定位 百度地图获取当前位置 获取自己的位置 百度定位示例
- HDU 1866 A + B forever! 有坑,注意题意!!!
- 黑马程序员-随笔2
- org.springframework.beans.factory.BeanNotOfRequiredTypeException:
- 16 oj 矩阵求和 重载运算符
- 结构-06. 复数四则运算(15)