因为工作中需要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的奇妙问题的糊涂解决方案的更多相关文章

  1. 2021年9月28日,老是遇到一些非常奇葩的问题。就离谱、好好的一个web项目就莫名奇妙坏了。

    起因是这样的:我前几天用idea2020编辑器,用ssm框架搭建了一个图书管理系统.只是将图书信息的增删改查实现,还有用户的注册和登录功能实现.本来想着今天将用户信息的删除和修改完善以下,本来是很简单 ...

  2. 终于成为博客员的一员了,这是我的第一篇博文,写一个关于ul li内容宽度的问题和解决方案

    第一次写博文,写一个刚才遇到的问题吧. 关于ul li文字长度不固定,一行显示多列.当指定宽度时,文字长度超过指定的li宽度时解决方案: 如下代码 <h4>发送对象(共10个会员)< ...

  3. 学习笔记_第一个strut程序_之中文乱码,过滤器解决方案及过程总结

    1.  第一次碰到加过滤器的过程,就是在学习struct1的时候,中文乱码 几个需要注意的关键字 2.什么叫package 所谓package就是打包的意思,就是说以下程序都是处于这个包内,所以一开始 ...

  4. [转]Win7、Windows Server 2008下无法在Windows Service中打开一个已经存在的Excel 2007文件问题的解决方案

    昨天,组里一个小朋友告诉我,他写的报表生成服务中无法打开一个已经存在的Excel 2007文件,他的开发环境是Win7.Visual Studio .Net 2008(Windows Server 2 ...

  5. WebBrowser加载一个URL被多次调用DocumentCompleted 的问题解决方案<转>

    关于DocumentCompleted事件,MSDN给出的解释是在文档加载完毕后执行,但是在我的程序中DocumentCompleted却被多次调用,查了一下资料,大概出现了以下几种情况. 1.Web ...

  6. 一个坑爹的Swift报错原因分析与解决方案

    有时候在实际开发中,完全没有任何问题.但是一到实机测试,就会直接卡机   let count = scoreStorage.count return scoreStorage[Int(arc4rand ...

  7. 编译GCC4.8.2

        公司的机器上默认是GCC4.4.6,为了完整的体验C++11,可以自己编译一个GCC4.8.2出来(自带了更高版本的glibc). 以下是备忘. 1.下载GCC源码以及依赖库 gmp ftp: ...

  8. [MEF插件式开发] 一个简单的例子

    偶然在博客园中了解到这种技术,顺便学习了几天. 以下是搜索到一些比较好的博文供参考: MEF核心笔记 <MEF程序设计指南>博文汇总 先上效果图 一.新建解决方案 开始新建一个解决方案Me ...

  9. ACEXML解析XML文件——我是如何学习并在短时间内掌握一个库的使用方法的

    最近做的C++项目中需要使用xml文件保存一些信息,程序启动时会读取这些信息.最终经过主程的评测,决定使用ACEXML库来读取解析XML文件. 好吧,至于为什么选择ACEXML库,我就不说了.既然选择 ...

随机推荐

  1. 1106. Two Teams(dfs 染色)

    1106 结点染色 当前结点染为黑 朋友染为白  依次染下去 这题是为二分图打基础吧 #include <iostream> #include<cstdio> #include ...

  2. createSQLQuery与createQuery的区别

    本文原址 : http://stta04.javaeye.com/blog/377633hibernate 中createQuery与createSQLQuery 昨晚帮同事看代码到凌晨2点多,今早6 ...

  3. poj2135

    加深对最小费用最大流的理解题 题目求无向图来回和最短的路径,每条边只能走一次 不难想到,无向图中来回等于从源点出发走两条不同路径到汇点(区别于k短路,这里每条边只能走一次): 考虑到边的限制,不难想到 ...

  4. WindowsServer2008配置MySql Proxy

    WIndowsServer2008配置MySql Proxy: 1.MySql Proxy的下载地址:http://dev.mysql.com/downloads/mysql-proxy/,选择Win ...

  5. CodeForces Round #285 Div.2

    C.Misha and Forest (图论 BFS) 比赛进行了一半才想起来有场CF没打,=_=|| 前两道题快速切掉,C题一直卡没什么好的思路 憋了几天,忍不住偷偷瞄了一下别人AC的代码,发现我题 ...

  6. 实现类似QQ的即时通信程序(十一)

    此为网络编程的一个系列,后续会把内容补上....

  7. I.MX6 driver goto 使用

    /************************************************************************** * I.MX6 driver goto 使用 * ...

  8. Android handler Thread 修改UI Demo

    /********************************************************************** * Android handler Thread 修改U ...

  9. 【转】【iOS】导航栏那些事儿

    原文网址:http://www.jianshu.com/p/f797793d683f 参考文章 navigationItem UINavigationItem UINavigationBar UIBa ...

  10. (转)solr排序OOM解决方法

    转自 http://topcat.iteye.com/blog/1293650 问题 lucene使用排序时会将被排序字段全部加入内存再进行排序,当多次使用不同字段进行排序时会造成OOM问题 解决方案 ...