1、编译C++程序,链接是需要添加 -lstdc++
g++和gcc本质一样的,本质上还是gcc,我们实验室所有的c++程序都是用gcc编译的,一般的程序用gcc足够了。
对于C++ 程序,编译的时候用gcc 或者g++ 都可以。
但是在进行连接的时候最好用g++,因为用g++ 会自动进行C++ 标准库的连接;用gcc 连接C++ 程序也可以,但是需要人为指定连接C++ 标准库,否则就会出现 undefined reference to `__gxx_personality_v/0' 之类的错误。
可见-lstdc++ 所对应的是标准C++库。
2、linux OpenCV 静态链接错误,链接是需要添加–ldl
undefined reference to `dlopen'
undefined reference to `dlerror'
undefined reference to `dlsym'
对dlopen, dlerror, dlsym 未定义的引用,缺少链接库,链接时加上选项-ldl
3、对icvPuts, icvGets, gzputs, gzgets, gzopen, gzclose 未定义的引用,编译错误如下
./obj/local/armeabi-v7a/libopencv_core.a(persistence.cpp.o): In function `icvPuts(CvFileStorage*, char const*)':persistence.cpp:(.text._ZL7icvPutsP13CvFileStoragePKc+0x20): undefined reference to
`gzputs'./obj/local/armeabi-v7a/libopencv_core.a(persistence.cpp.o): In function `icvGets(CvFileStorage*, char*, int)':persistence.cpp:(.text._ZL7icvGetsP13CvFileStoragePci+0x26): undefined reference to
`gzgets'./obj/local/armeabi-v7a/libopencv_core.a(persistence.cpp.o): In function
缺少zlib库引起的,编译链接时加上-lz
4、如何在configure时,将编译参数传入,改变默认的编译器gcc成arm-linux编译器
按照INSTALL中的介绍,也是常用的方法,在configure的时候,加上–host=arm-linux,结果没有实现我们要的效果,没有将编译器从默认的gcc改成arm-linux-gcc,编译器还是用的默认的gcc。
参数传递必须像CFLAGS=-O2 ./configure一样,将参数设置放在configure的前面:
CC=arm-linux-gcc ./configure才能识别的。
(如果CC参数放在configure后面:./configure CC=arm-linux-gcc 则不能识别。
)
–prefix=/usr/crifan/lrzsz,表示具体安装到哪里
完整的配置:
CFLAGS=-O2 CC=arm-linux-gcc ./configure–cache-file=cache_file_0 –prefix=/usr/crifan/lrzsz
5、zlib的交叉编译
交叉编译zlib-1.2.3.tar.bz2:。