引用: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)相关推荐

  1. g linux 未定义的引用_【转】 g++编译时对'xxxx'未定义的引用问题(undefined reference to)...

    转自:https://blog.csdn.net/killwho/article/details/53785910 引用:http://www.linuxdiyf.com/linux/16754.ht ...

  2. OpenCV4编译链接问题xxxx未定义的引用

    大多数情况是因为Anaconda中的部分库冲突,例如usr/lib/x86_64-linux-gnu/libSM.so.6:对'uuid_unparse_lower@UUID_1.0'未定义的引用 首 ...

  3. C语言中“pow”函数,关于使用编译器编译时产生pow未定义引用。

    首先我的代码是这样的: 当我使用gcc Test.c 的时候编译出现如下的错误(未定义的引用): 出现这个的原因是因为编译的时候没有连接C语言中的数据库,所以会报错,当我们编译的时候加上-lm连接数据 ...

  4. 调用opencv的c接口时,编译提示 对‘cvRound’未定义的引用

    CMakeFiles/inf2vis.dir/inf2vis_check.c.o:在函数'cvPointFrom32f'中: /usr/local/include/opencv2/core/types ...

  5. 解决 编译错误 对‘sem_init’未定义的引用 collect2: error: ld returned 1 exit status builtin: recipe for

    执行 $ make (gcc -Wall -g -O0 -c p*v.c) (gcc -lpthread p*v.o c*p.o -o p*v) 报错如下 p*v.o:在函数'init'中: /med ...

  6. VS远程开发(远程调试)编译报错:对‘xxx’未定义的引用(设置库依赖顺序)(已解决)pthread(项目-->属性-->链接器-->输入-->库依赖项)

    如图在VS中对linux进行远程开发时,编译报错: 貌似是因为在代码中使用了pthread.h的函数,链接库依赖顺序出了问题,我在ubuntu里手动使用gcc main.c -lpthread -o ...

  7. C++编译时出现未定义的引用问题解决

    未定义的引用(undefined reference)出现的原因是生成可执行文件所在的cpp包含头文件时,头文件中声明的函数定义未被可执行文件所识别,解决办法如下: add_library(libra ...

  8. pthread_create未定义的引用

    在ubuntu使用gcc编译时出现"pthread_create未定义的引用"问题. 解决如下:在编译时加入-l pthread.例如gcc thread.c -o thr -l ...

  9. 问题记录 -- 未定义的引用 ||| not found

    目录 例子0 对'myprojectApi::myprojectApi(bool, int, int, bool)'未定义的引用 例子1 源码编译opencv,报错 libopencv_imgcode ...

  10. C++工作笔记-对'xxxxx'未定义的引用的2种情况

    最近项目里面经常C++,Java程序混写,时不时还要搞点Python. 对此记录下'xxxx'未定义的引用这种错误,在此记录下,免得下次犯下这么愚蠢的问题. 遇到这种错误一般是2种情况: 1. 包含了 ...

最新文章

  1. bootstrap 两个轮播图冲突_Bootstrap的轮播图样式
  2. HPC System Design
  3. git 如何清理操作日志_git如何清空所有的commit记录
  4. 特征工程的宝典-《Feature Engineering for Machine Learning》翻译及代码实现
  5. tibco linux安装手册,TIBCO iProcess安装系列在Linux上升级Oracle9.2.0.4到9.2.0.7
  6. gh0st源码分析与远控的编写(三)
  7. Scala入门到精通——第二十一节 类型参数(三)-协变与逆变
  8. QPW 系统管理后台用户表(tm_user_info)
  9. python数据展示库_收藏!盘点很实用的数据科学Python库
  10. java jar包与配置文件的写法
  11. 人生一知己,足以慰风尘吗?
  12. Sell yourself 1
  13. Oracle数据库 【SYNONYM 同义词 シノニム】
  14. c #include如何找到文件_UNIX系统上程序员需要掌握的C编程环境的基础知识
  15. Python一个很好玩的特性decorator
  16. IO编程(对IO是什么的详解)
  17. 56个民族HTML代码
  18. oob袋外估计matlab,机器学习:随机森林RF-OOB袋外错误率
  19. JSOI2008 小店购物
  20. elementUI动态菜单

热门文章

  1. 推荐→可以做时间线图片的APP
  2. 【HDL系列】半减器、全减器和减法器原理和设计
  3. 【Verilog HDL】4.全减器
  4. jdk32位安装包下载_天正T20V5.0软件安装包下载(建筑,给排水,结构,电气,暖通)+安装教程...
  5. 【seaborn】(五)联合分布图
  6. 计算机版本低怎么升级,电脑ie浏览器版本过低怎么升级(浏览器版本过低升级步骤)...
  7. html中css鼠标手势样式,CSS鼠标手势
  8. 关于无线网络中几个名词WPS,PSK,WPA,WPA2等名词的解释以及WPA的破解
  9. 永洪bi_永洪bi相关优惠价格-永洪bi的技术博客问答-阿里云
  10. 华为安装gsm框架_华为Mate30Pro怎么安装谷歌服务框架?谷歌服务GMS框架安装方法...