博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
g++编译时遇到问题undefined reference to
阅读量:7227 次
发布时间:2019-06-29

本文共 1486 字,大约阅读时间需要 4 分钟。

文件目录结构体为: src 和include 分别用来存放.cpp文件和 .hpp文件

其中:src文件夹下有需要的文件 simulator_client.cpp crc32.cpp ; include文件夹下有对应的头文件 simulator_client.hpp、crc32.h及使用的头文件cJSON.h

使用命令编译时遇到如下问题:

g++ simulator_client.cpp  -o simulator_client -lm -I../include

/tmp/ccZ5rfZQ.o: In function `packet_data(unsigned char, unsigned char, unsigned short, char*, unsigned int)':
simulator_client.cpp:(.text+0x228): undefined reference to `crc32'
simulator_client.cpp:(.text+0x27e): undefined reference to `crc32'
/tmp/ccZ5rfZQ.o: In function `create_package_json_info(package*, int)':
simulator_client.cpp:(.text+0x4e9): undefined reference to `cJSON_CreateObject'
simulator_client.cpp:(.text+0x512): undefined reference to `cJSON_CreateString'
........
collect2: error: ld returned 1 exit status

原因: 主要是C/C++编译为obj文件的时候并不需要函数的具体实现,只要有函数的原型即可。但是在链接为可执行文件的时候就必须要具体的实现了。

如果错误是未声明的引用,那就是找不到函数的原型,解决办法这里就不细致说了,通常是相关的头文件未包含。

 

使用命令  g++ simulator_client.cpp crc32.cpp -o simulator_client -lm -I../include 后

undefined reference to `crc32' 问题消失。

 

还有一个就是cjson库的问题。在makefile中编译时加入-lm动态库是能够查找到libcsjon.so连接库的,但是不知为什么直接使用g++命令编译却找不到。

查看g++/gcc链接时查找路径的规则:

1) -L指定的路径,从左到右依次查找

2)由环境变量LIBRARY_PATH指定的路径,使用":"分割从左到右依次查找

3)/etc/ld.so.conf指定的路径

4)/lib 和 /usr/lib目录下

在此我们查看3)中的路径:

/usr/local/lib

在此路径下我们可以看到cjson的库文件为:(名称为libcjson.so)

因此将编译命令改为:

  g++ simulator_client.cpp crc32.cpp -o simulator_client -I../include -lcjson

编译通过。

 

参考地址: https://blog.csdn.net/cserchen/article/details/5503556

转载于:https://www.cnblogs.com/rohens-hbg/p/10904047.html

你可能感兴趣的文章
归并排序
查看>>
java 的转义字符
查看>>
SharedPreferences的使用注意事项
查看>>
sofa-pbrpc高级用法
查看>>
Oracle 函数返回表实例2种写法实例
查看>>
mysql数据库主从复制
查看>>
Shell标准输出、标准错误 >/dev/null 2>&1
查看>>
Android自定义对话框(Dialog)位置,大小
查看>>
设置python的默认编码为utf8
查看>>
简易sqlhelper-java
查看>>
通过案例对SparkStreaming 透彻理解三板斧之一:解密SparkStreaming运行机制
查看>>
HBuilder 学习笔记
查看>>
利用OpenStreetMap(OSM)数据搭建一个地图服务
查看>>
TopN算法与排行榜
查看>>
lucene排序算法之向量空间模型(一)
查看>>
新浪微博数据Json格式解析
查看>>
WLAN 802.11 wifl区别
查看>>
oracle授权动态视图权限给用户
查看>>
Debian – 出现-bash: pip: command not found错误解决办法
查看>>
Zxing扫描二维码
查看>>