问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

undefined reference to异常怎么解决

发布网友 发布时间:2022-04-21 05:35

我来回答

7个回答

热心网友 时间:2022-04-11 23:18

这是个编程链接错误,意思是说在你的程序里引用了某个函数或变量, 但是链接器找不到该变量的定义.

(1)如果报的符号是在某个第三方库里的, 比如uuid的什么什么函数, 则要检查你的libqte是不是编译得正确. 本来这些库应该正确链接到libqte.so上, 这样在qtopia链接的时候就不需要显式的加上这些库了. 

有的时候libqte没有正确链接好, 但是在编译libqte阶段不会报错, 到后面qtopia或者其他应用编译的时候就出错了.


(2)把报错的库删除, 重新编译库. 如果是libqte, 要把你环境里的出现libqte的地方都检查检查, 有可能存在不同的libqte互相影响.

扩展资料:

程序错误类型

程序错误类型主要有语法错误、语义错误和逻辑错误,其中,语法错误和逻辑错误能通过编译器发现.

(1)语法错误

语法错误是因为源程序中不正确的代码产生的,即在编写程序时没有遵守语法(或词法)规则,书写了错误的语法代码,从而导致编译器无法正确解释源代码而产生的错误,通常是由于录入的错误引起的,它在词法分析或语法分析时检测出来。

(2)语义错误

语义错误是指源程序中不符合语义规则的错误,即一条语句试图执行一条不可能执行的操作而产生的错误。语义错误有的在语义分析时检测处来,有的在运行时才能检测出来。如变量声明错误、作用域错误、数据存储区的溢出等错误。

(3)逻辑错误

逻辑错误是指程序的运行结果和程序员的设想有出入时产生的错误。这类错误并不直接导致程序在编译期间和运行期间出现错误,但是程序未按预期方式执行,产生了不正确的运行结果,较难发现。这种错误只能通过分析结果,将结果与设计方案进行对比来发现。

参考资料:百度百科-错误处理

热心网友 时间:2022-04-12 00:36

关于undefined reference这样的问题,大家其实经常会遇到,在此,我以详细地示例给出常见错误的各种原因以及解决方法,希望对初学者有所帮助。

1.  链接时缺失了相关目标文件(.o)

    测试代码如下:

 

    然后编译。

gcc -c test.c  gcc –c main.c 

    得到两个 .o 文件,一个是 main.o,一个是 test.o ,然后我们链接 .o 得到可执行程序:

gcc -o main main.o 

    这时,你会发现,报错了:

main.o: In function `main':  main.c:(.text+0x7): undefined reference to `test'  collect2: ld returned 1 exit status 

    这就是最典型的undefined reference错误,因为在链接时发现找不到某个函数的实现文件,本例中test.o文件中包含了test()函数的实现,所以如果按下面这种方式链接就没事了。

gcc -o main main.o test.o 

   【扩展】:其实上面为了让大家更加清楚底层原因,我把编译链接分开了,下面这样编译也会报undefined reference错,其实底层原因与上面是一样的。

gcc -o main main.c //缺少test()的实现文件 

需要改成如下形式才能成功,将test()函数的实现文件一起编译。

gcc -o main main.c test.c //ok,没问题了 

2.    链接时缺少相关的库文件(.a/.so)

    在此,只举个静态库的例子,假设源码如下。

    先把test.c编译成静态库(.a)文件

gcc -c test.c  ar -rc test.a test.o 

    至此,我们得到了test.a文件。我们开始编译main.c

gcc -c main.c 

    这时,则生成了main.o文件,然后我们再通过如下命令进行链接希望得到可执行程序。

gcc -o main main.o 

    你会发现,编译器报错了:

/tmp/ccCPA13l.o: In function `main':  main.c:(.text+0x7): undefined reference to `test'  collect2: ld returned 1 exit status 

    其根本原因也是找不到test()函数的实现文件,由于该test()函数的实现在test.a这个静态库中的,故在链接的时候需要在其后加入test.a这个库,链接命令修改为如下形式即可。

gcc -o main main.o ./test.a  //注:./ 是给出了test.a的路径 

     【扩展】:同样,为了把问题说清楚,上面我们把代码的编译链接分开了,如果希望一次性生成可执行程序,则可以对main.c和test.a执行如下命令。

gcc -o main main.c ./test.a  //同样,如果不加test.a也会报错 

3.    链接的库文件中又使用了另一个库文件

    这种问题比较隐蔽,也是我最近遇到的与网上大家讨论的不同的问题,举例说明如下,首先,还是看看测试代码。

    从上图可以看出,main.c调用了test.c的函数,test.c中又调用了fun.c的函数。
    首先,我们先对fun.c,test.c,main.c进行编译,生成 .o文件。

gcc -c func.c  gcc -c test.c  gcc -c main.c 

    然后,将test.c和func.c各自打包成为静态库文件。

ar –rc func.a func.o  ar –rc test.a test.o 

    这时,我们准备将main.o链接为可执行程序,由于我们的main.c中包含了对test()的调用,因此,应该在链接时将test.a作为我们的库文件,链接命令如下。

gcc -o main main.o test.a 

    这时,编译器仍然会报错,如下:

test.a(test.o): In function `test':  test.c:(.text+0x13): undefined reference to `func'  collect2: ld returned 1 exit status 

    就是说,链接的时候,发现我们的test.a调用了func()函数,找不到对应的实现。由此我们发现,原来我们还需要将test.a所引用到的库文件也加进来才能成功链接,因此命令如下。

gcc -o main main.o test.a func.a 

    ok,这样就可以成功得到最终的程序了。同样,如果我们的库或者程序中引用了第三方库(如pthread.a)则同样在链接的时候需要给出第三方库的路径和库文件,否则就会得到undefined reference的错误。

4 多个库文件链接顺序问题

    这种问题也非常的隐蔽,不仔细研究你可能会感到非常地莫名其妙。我们依然回到第3小节所讨论的问题中,在最后,如果我们把链接的库的顺序换一下,看看会发生什么结果?

gcc -o main main.o func.a test.a 

    我们会得到如下报错.

test.a(test.o): In function `test':  test.c:(.text+0x13): undefined reference to `func'  collect2: ld returned 1 exit status 

    因此,我们需要注意,在链接命令中给出所依赖的库时,需要注意库之间的依赖顺序,依赖其他库的库一定要放到被依赖库的前面,这样才能真正避免undefined reference的错误,完成编译链接。

5. 在c++代码中链接C语言的库

    如果你的库文件由c代码生成的,则在c++代码中链接库中的函数时,也会碰到undefined reference的问题。下面举例说明。

    首先,编写c语言版库文件: 

  

 

    编译,打包为静态库:test.a

gcc -c test.c  ar -rc test.a test.o 

    至此,我们得到了test.a文件。下面我们开始编写c++文件main.cpp

    

    然后编译main.cpp生成可执行程序:

g++ -o main main.cpp test.a 

    会发现报错:

/tmp/ccJjiCoS.o: In function `main': main.cpp:(.text+0x7): undefined reference to `test()' collect2: ld returned 1 exit status 

    原因就是main.cpp为c++代码,调用了c语言库的函数,因此链接的时候找不到,解决方法:即在main.cpp中,把与c语言库test.a相关的头文件包含添加一个extern "C"的声明即可。例如,修改后的main.cpp如下:

    

g++ -o main main.cpp test.a 

    再编译会发现,问题已经成功解决。

热心网友 时间:2022-04-12 02:11

关于undefined reference这样的问题,大家其实经常会遇到,在此,我以详细地示例给出常见错误的各种原因以及解决方法,希望对初学者有所帮助。

链接时缺失了相关目标文件

2.gcc -c test.c,gcc –c main.c,得到两个 .o 文件,一个是 main.o,一个是 test.o ,然后我们链接 .o 得到可执行程序:

3.gcc -o main main.o这时,你会发现,报错了:

4.main.o: In function `main':main.c:(.text+0x7): undefined reference to `test'collect2: ld returned 1 exit status

这就是最典型的undefined reference错误,因为在链接时发现找不到某个函数的实现文件,本例中test.o文件中包含了test()函数的实现,所以如果按下面这种方式链接就没事了。

热心网友 时间:2022-04-12 04:02

在你的操作系统中出现了这样的一场,就是在告诉你,你的系统与一些软件不兼容,需要你找到另外的软件做代替。

热心网友 时间:2022-04-12 06:10

看下是不是有宏将其屏蔽了

热心网友 时间:2022-04-12 08:35

如果实在linux下编译多线程问题遇到了这个错误,如下图所示:

那么错误和代码没有关系,和编译的命令有关,将gcc编译的命令 后加上lpthread 即可

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
平方公里与亩有什么区别? 申请名称预先核准应提交哪些档 申请名称预先核准应提交哪些资料 申请名称预先核准需要哪些资料 如何隐藏iphonex的刘海? 07款凯美瑞遥控怎么换电池 金针云耳蒸滑鸡做法 爱奇艺VIP会员有哪些免费领取或者低价购买的渠道?持续更新中_百度知 ... 吸尘器应该怎么选?全屋灰尘清洁神器——追觅 V16 吸尘器深度测评 两个长方形重叠部分的面积相当于小长方形面积的4分之1,相当于大的6分... undefinedreferenceto怎么解决 如何在 android 设备上使用 pjsip G.729 编解码的功能 在用qt尝试调用matlab时出现的问题,error: undefined reference to `engOpen' 【c++】访问静态成员变量出现undefined reference to c++primer第五版看几遍 为什么会出现如:error:undefined reference to ‘ 银行转账多少会被监管? 个人转账10万起监控什么意思 手机银行转账5万会有防诈骗验证? 银行卡频繁转账会被监控吗? 个人给个人转账80万会被监控吗 银行转账多少会被风控 手机银行刷脸转帐多少钱会被监控? 个人转账多少金额会被监控 个人转账超过多少被监管 鸡翅的做法,油炸鸡翅怎么做好吃,油炸鸡翅的家常做法 鸡翅怎样做菜好吃? 鸡翅除了可乐鸡翅的做法,还有哪些好吃的做法? 鸡翅都有什么做法啊?详细的菜谱 闷锅鸡中翅的做法 C++编译静态函数有问题:undefined reference qt中遇到undefined reference to应该怎么解决 c语言中undefined reference to ""怎么解决 c++ 编译出现 undefined reference to,检查了很多遍还是没发现错误。 undefined reference to异常怎么解决 404 Not Found undefined reference to怎么解决的 linux下调用bswabe库出现 undefined reference to `bswabe_setup' collect2: ld 返回 1 C语言中ld returned1exit status什么意思? c语言中undefined reference to ""怎么解决 反编译时遇到问题undefined reference to`mulstore' Linux编译link时提示undefined reference’dlclose’怎么办 QQ游戏德克萨斯扑克怎么玩?怎么看大小? 404 Not Found QQ游戏德克萨斯扑克怎样带入德州豆进行游戏? QQ游戏德克萨斯扑克怎么玩,难不难 QQ游戏德克萨斯扑克没有德州豆怎么办 qq游戏 德克萨斯扑克 QQ游戏德克萨斯扑克庄家有什么用?还有那个大小? qq空间的德克萨斯扑克