一个GCC4.6.3的奇妙问题的糊涂解决方案
因为工作中需要OpenCV,又不想用Windows,所以我就在Linux下编译安装OpenCV了。一开始,由于我的计算机不能安装ubuntu12.04,所以我安装了ubuntu13.04,opencv的环境也配置的很顺利。
Ubuntu 13.04 的编译问题与解决方案
在13.04上安装完成opencv后,我便兴冲冲的实验了一把,其实我的程序什么也没有做,只是添加了包含了opencv的头文件而已。然后我就编译呀。
// file : test.c
#include <opencv/cv.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
return 0;
}
编译命令:
$ gcc -c test.c
$ gcc test.o -o test
结果就输出了一堆如下的信息:
test.o:test.c:function cvDecRefData: error: undefined reference to 'cvFree_'
test.o:test.c:function cvDecRefData: error: undefined reference to 'cvFree_'
test.o:test.c:function cvGetRow: error: undefined reference to 'cvGetRows'
test.o:test.c:function cvGetCol: error: undefined reference to 'cvGetCols'
test.o:test.c:function cvReleaseMatND: error: undefined reference to 'cvReleaseMat'
test.o:test.c:function cvSubS: error: undefined reference to 'cvAddS'
test.o:test.c:function cvCloneSeq: error: undefined reference to 'cvSeqSlice'
test.o:test.c:function cvSetNew: error: undefined reference to 'cvSetAdd'
test.o:test.c:function cvGetSetElem: error: undefined reference to 'cvGetSeqElem'
test.o:test.c:function cvEllipseBox: error: undefined reference to 'cvEllipse'
test.o:test.c:function cvFont: error: undefined reference to 'cvInitFont'
test.o:test.c:function cvReadIntByName: error: undefined reference to 'cvGetFileNodeByName'
test.o:test.c:function cvReadRealByName: error: undefined reference to 'cvGetFileNodeByName'
test.o:test.c:function cvReadStringByName: error: undefined reference to 'cvGetFileNodeByName'
test.o:test.c:function cvReadByName: error: undefined reference to 'cvGetFileNodeByName'
test.o:test.c:function cvReadByName: error: undefined reference to 'cvRead'
test.o:test.c:function cvContourPerimeter: error: undefined reference to 'cvArcLength'
test.o:test.c:function cvCalcHist: error: undefined reference to 'cvCalcArrHist'
collect2: error: ld returned 1 exit status
我就纳闷了呀,我的程序里只是包含了头文件啊,怎么会使用opencv的函数呢,所以每必要产生这么多对opencv库函数的依赖呀!
于是,我看了看编译时产生的汇编代码,看看是否有啥蹊跷。
gcc -S test.c
打开test.s文件,看看,果然又很多opencv的库函数呢。于是我就开始添加opencv的库。最后就这样解决了。
$ gcc test.o -o test -lopencv_core -L/usr/local/lib -lopencv_highgui
12.04下gcc的问题与解决
跟在13.04下差不多的情况,按照上面的过程就可以解决了。
正当我为解决了这个问题高兴的时候,我遇到了新的问题。
一般我习惯把输入文件放到编译命令的最后,结果这样照样会出现问题。
出现问题的编译命令是:
$ gcc -o test -lopencv_core -L/usr/local/lib -lopencv_imgproc test.o
我发现
只要把test.o放到-l..这些选项的前面,就不会出现函数未定义的问题。
就这样算解决了把。以前我也遇到过由于链接库的位置不对而导致链接不正确的情况,看来编译器还不是那么智能啊,以后要小心了。
一个GCC4.6.3的奇妙问题的糊涂解决方案的更多相关文章
- 2021年9月28日,老是遇到一些非常奇葩的问题。就离谱、好好的一个web项目就莫名奇妙坏了。
起因是这样的:我前几天用idea2020编辑器,用ssm框架搭建了一个图书管理系统.只是将图书信息的增删改查实现,还有用户的注册和登录功能实现.本来想着今天将用户信息的删除和修改完善以下,本来是很简单 ...
- 终于成为博客员的一员了,这是我的第一篇博文,写一个关于ul li内容宽度的问题和解决方案
第一次写博文,写一个刚才遇到的问题吧. 关于ul li文字长度不固定,一行显示多列.当指定宽度时,文字长度超过指定的li宽度时解决方案: 如下代码 <h4>发送对象(共10个会员)< ...
- 学习笔记_第一个strut程序_之中文乱码,过滤器解决方案及过程总结
1. 第一次碰到加过滤器的过程,就是在学习struct1的时候,中文乱码 几个需要注意的关键字 2.什么叫package 所谓package就是打包的意思,就是说以下程序都是处于这个包内,所以一开始 ...
- [转]Win7、Windows Server 2008下无法在Windows Service中打开一个已经存在的Excel 2007文件问题的解决方案
昨天,组里一个小朋友告诉我,他写的报表生成服务中无法打开一个已经存在的Excel 2007文件,他的开发环境是Win7.Visual Studio .Net 2008(Windows Server 2 ...
- WebBrowser加载一个URL被多次调用DocumentCompleted 的问题解决方案<转>
关于DocumentCompleted事件,MSDN给出的解释是在文档加载完毕后执行,但是在我的程序中DocumentCompleted却被多次调用,查了一下资料,大概出现了以下几种情况. 1.Web ...
- 一个坑爹的Swift报错原因分析与解决方案
有时候在实际开发中,完全没有任何问题.但是一到实机测试,就会直接卡机 let count = scoreStorage.count return scoreStorage[Int(arc4rand ...
- 编译GCC4.8.2
公司的机器上默认是GCC4.4.6,为了完整的体验C++11,可以自己编译一个GCC4.8.2出来(自带了更高版本的glibc). 以下是备忘. 1.下载GCC源码以及依赖库 gmp ftp: ...
- [MEF插件式开发] 一个简单的例子
偶然在博客园中了解到这种技术,顺便学习了几天. 以下是搜索到一些比较好的博文供参考: MEF核心笔记 <MEF程序设计指南>博文汇总 先上效果图 一.新建解决方案 开始新建一个解决方案Me ...
- ACEXML解析XML文件——我是如何学习并在短时间内掌握一个库的使用方法的
最近做的C++项目中需要使用xml文件保存一些信息,程序启动时会读取这些信息.最终经过主程的评测,决定使用ACEXML库来读取解析XML文件. 好吧,至于为什么选择ACEXML库,我就不说了.既然选择 ...
随机推荐
- 中国海洋大学第四届朗讯杯高级组 Cash Cow(模拟)
题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2721 题意: 给定n个左标,跟那n个坐标 ...
- (转)理解OAuth 2.0
转自:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛 ...
- 【转】经典SQL语句大全
原博客地址:http://www.cnblogs.com/yubinfeng/archive/2010/11/02/1867386.html (超级纳闷为啥没有转载的功能) 一.基础 1.说明:创建数 ...
- Hbase学习笔记(安装和基础知识及操作)
1.Hbase简介 1.面向列的分布式数据库 2. 以HDFS作为文件系统 3. 利用MapReduce处理Hbase中海量数据 4. ZookKeeper作为协调工具 5. sqoop提供Hbase ...
- [Tommas] 测试场景 VS 测试用例 哪个更好?(转)
分享一篇网上别人的感悟: 6年前,我在一家中型跨国公司工作的时候,我建议与其浪费时间在准备充分的测试用例,还不如编写描述测试场景的文档.所有的人都对我的建议.投以烦恼的目光.他们的脸上清晰地 ...
- css定位方式
CSS表达式 匹配元素说明 xpath * 匹配任何元素 //* div 标签 //div div#eleID by ID //div[@id='eleID'] div.class by clas ...
- 【原】Storm配置
Storm入门教程 1. Storm基础 Storm Storm主要特点 Storm基本概念 Storm调度器 Storm配置 Guaranteeing Message Processing(消息处理 ...
- Java面试题:n=2\n1*2*5*6\n--3*4\n\nn=3\n1*2*3*10*11*12\n--4*5*8*9\n----6*7\n如何实现如上结构的数据
今天学长在面试的时候遇到了一道题,然后让大家做一做. 在不看下面的答案之前,悠闲的朋友们一起来抖动一下大脑吧! 以下是我的想法: import java.util.Scanner;public cla ...
- 分享两个模拟get和post方法的工具类,让应用能够与服务器进行数据交互
很久没有码字了,今天跟大家分享一个模拟get和post方法的工具类,在安卓应用中很多都需要跟服务器进行数据交互,这需要两方面的配合,首先服务器端会给应用提供一些数据交互的接口,可是怎样在应用中去调用呢 ...
- 【创建本地仓库】【for Centos】CentOS下创建本地repository
[日期]2014年4月24日 [平台]Centos 6.5 [工具]httpd yum-utils createrepo [步骤] 1)安装httpd. yum install httpd 2)安装y ...