【转】 g++编译时对'xxxx'未定义的引用问题(undefined reference to)
转自:https://blog.csdn.net/killwho/article/details/53785910
引用:http://www.linuxdiyf.com/linux/16754.html
在使用gcc编译的时候有时候会碰到这样的问题,编译为.o(obj) 文件没有问题,但是编译(这一步应该是链接)为可执行文件的时候会出现找不到’xxx’的定义的情况。
例如:
g++ -o spider -rdynamic -lpthread -levent -lcrypt -ldl bloomfilter.o confparser.o crc32.o dso.o hashs.o md5.o qstring.o sha1.o socket.o spider.o threads.o url.o
...
dso.o:在函数‘dso_load(char const*, char const*)’中:
dso.cpp:(.text+0x3c):对‘dlopen’未定义的引用
dso.cpp:(.text+0x4c):对‘dlsym’未定义的引用
dso.cpp:(.text+0xb5):对‘dlerror’未定义的引用
dso.cpp:(.text+0x13e):对‘dlclose’未定义的引用
原因
出现这种情况的原因,主要是C/C++编译为obj文件的时候并不需要函数的具体实现,只要有函数的原型即可。但是在链接为可执行文件的时候就必须要具体的实现了。如果错误是未声明的引用,那就是找不到函数的原型,解决办法这里就不细致说了,通常是相关的头文件未包含。
解决办法
指定原因就好办了,既然知道是缺少了函数的具体实现,那么就给它这个函数的实现就好了。比如上面的例子,是因为确实了dlopen、dlsym、dlerror、dlclose这些函数的实现,这几个函数是用于加载动态链接库的,编译的时候需要添加-ldl来使用dl库(这是静态库,在系统目录下/usr/lib/i386-linux-gnu/libdl.a、/usr/lib/x86_64-linux-gnu/libdl.a)。
但是看上面编译的时候是有添加-ldl选项的,那么为什么不行呢?
gcc 依赖顺序问题
这个主要的原因是gcc编译的时候,各个文件依赖顺序的问题。
在gcc编译的时候,如果文件a依赖于文件b,那么编译的时候必须把a放前面,b放后面。
例如:在main.c中使用了pthread库相关函数,那么编译的时候必须是main.c在前,-lpthread在后。gcc main.c -lpthread -o a.out。
上面出现问题的原因就是引入库的顺序在前面了,将其放置在后面即可了。
g++ -o spider bloomfilter.o confparser.o crc32.o dso.o hashs.o md5.o qstring.o sha1.o socket.o spider.o threads.o url.o -rdynamic -lpthread -levent -lcrypt -ldl
Linux添加环境变量与GCC编译器添加INCLUDE与LIB环境变量:http://www.linuxdiyf.com/linux/16492.html
GCC编译器下的-L与-l的区别:http://www.linuxdiyf.com/linux/16182.html
Linux下GCC编译器用于编译运行的内核版本:http://www.linuxdiyf.com/linux/15874.html
Linux源码安装GCC编译器:http://www.linuxdiyf.com/linux/7348.html
【转】 g++编译时对'xxxx'未定义的引用问题(undefined reference to)的更多相关文章
- gcc编译时对'xxxx'未定义的引用问题
gcc编译时对’xxxx’未定义的引用问题 gcc编译时对’xxxx’未定义的引用问题 原因 解决办法 gcc 依赖顺序问题 在使用gcc编译的时候有时候会碰到这样的问题,编译为.o(obj) 文件没 ...
- gcc编译时对’xxxx’未定义的引用问题
gcc编译时对’xxxx’未定义的引用问题 原因 解决办法 gcc 依赖顺序问题 在使用gcc编译的时候有时候会碰到这样的问题,编译为.o(obj) 文件没有问题,但是编译(这一步应该是链接)为可执行 ...
- (原)编译caffe时提示未定义的引用(undefined reference to)
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5864715.html 参考网址: https://github.com/BVLC/caffe/issu ...
- gcc/g++ 编译时出现:“对’xxxx’未定义的引用,collect2: error: ld returned 1 exit status” 的错误
出现的问题: 在使用 make 编译实现一个程序时,出现了下面的错误.查看程序源文件所在的目录时发现程序已经完成了编译,并生成了 list_repo.o 的文件,说明是在程序链接生成可执行文件时发生了 ...
- oci7编译报’olog’等未定义的引用问题
前一天在测试一个数据导出的时候,发现oci7编译的时候报了一大堆类似"’oparse’未定义的引用问题",这通常是因为找不到实现库的原因,但是oci相关的库又都是存在的,用oci7 ...
- 编译压缩代码 MFCompress-src-1.01 :对‘***’未定义的引用
提示 MFCompressD.o:在函数‘main’中:MFCompressD.c:(.text.startup+0x34a): 警告: the use of `tempnam' is dangero ...
- [转]c++使用thread类时编译出错,对‘pthread_create’未定义的引用
转载地址:https://blog.csdn.net/wuhui20091515/article/details/52531202 例子1 #include <iostream> #inc ...
- 编译lua5.3.2报错提示libreadline.so存在未定义的引用解决方法
从官网上下载5.3.2的源码后,make linux进行编译,提示报错: gcc -std=gnu99 -o lua lua.o liblua.a -lm -Wl,-E -ldl -lreadline ...
- GCC 高版本7.4 编译链接 boost 报错 boost::thread::XXX’未定义的引用 解决方法
背景:开发中的项目之前一直用GCC4.8,boost库1.48版本的开发环境.现在因业务需求,需要更换GCC7.4,boost库1.70. 问题:可以正常编译BOOST的链接库文件,但是链接时候报错. ...
随机推荐
- thinkphp5 tp5 与 nginx 搭配在根目录和子目录中如何设置伪静态
配置文件参考一下: location /public/ { if (!-e $request_filename){ rewrite ^/public/(.*)$ /public/index.php?s ...
- kali linux fuzz工具集简述
模糊测试是一种自动化软件测试技术,涉及提供无效,意外或随机数据作为计算机程序的输入. 然后监视程序是否存在异常,例如崩溃,内置代码断言失败或潜在的内存泄漏. 通常,模糊器用于测试采用结构化输入的程序. ...
- Junit Framework -TestRule,自动化测试中如何再次运行失败的测试用例
有时由于服务器,浏览器等问题,会导致自动化测试用例运行失败,此处通过案例讲解如何使用Junit框架中的TestRule来实现重复运行失败的测试用例. 首先定义一个类并让它实现TestRule,代码如下 ...
- EControl的安装
EControl提供了运行期在窗体上进行界面设计的能力,手上的控件包是Delphi2010版的,在xe6下安装出现了一系列问题,弄了一晚上,总算搞定. 1.编译zDesign14.bpl包,修改DSN ...
- 02MySQL中的数据类型
一.数值 INT DECIMAL 准确的小数值 FLOAT DOUBLE 二.字符串类型 CHAR(m) 此数据类型用于表示固定长度的字符串,可以包含最多达255个字符,其中m代表字符串的长度.长度固 ...
- 今日头条 CEO 张一鸣:面试了 2000 个年轻人,混得好的都有这 5 种特质
https://blog.csdn.net/qq_35246620/article/details/72801285 博主说:多了解了解总是好的. 正文 张一鸣算是 80 后中绝对的佼佼者.1983 ...
- IDEA引入Gradle工程小记
1.首先IDEA要在该工程Settings中配置本地安装的Gradle,配好其home目录,注意目录到根目录即可,不要到bin一级,否则提示错误,无法使用: 2.配置好后会自动侦测Gradle项目,点 ...
- Difference between ID and control.ClientID OR why use control.ClientID if I can access control through ID
https://stackoverflow.com/questions/3743582/difference-between-id-and-control-clientid-or-why-use-c ...
- js动画(速度)
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta ht ...
- ZJOI 2015 幻想乡战略游戏(动态点分治)
题意 https://loj.ac/problem/2135 思路 首先要明确一点,答案分布是有单调性的.什么意思呢?假设我们的答案在 \(u\) 节点,\((u,v)\) 之间有一条边且 \(u\) ...