交叉编译OpenCV为静态库

系统:ubuntu 12.04


1.安装交叉编译工具

$ sudo apt-get install g++-arm-linux-gnueabihf

2.配置makefile

新建一个目录build 用来编译,位置随意,我放在opencv源代码的根目录。

opencv采用cmake来配置,格式如下

cmake [] -DCMAKE_TOOLCHAIN_FILE=/platforms/linux/arm-gnueabi.toolchain.cmake

操作命令

$ cd build
$ cmake -DENABLE_VFPV3=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/arm-gnueabi.toolchain.cmake ..
$ make


参数解释:

ENABLE_VFPV3=ON 启用VFP

BUILD_SHARED_LIBS=OFF 关闭生成动态库,即生成静态库

ENABLE_NEON=ON 启用neon

SOFTFP=ON 启用softfp


参考:

Cross compilation for ARM based Linux systems

Linux 下编译安装OpenCV


3.使用静态库

写一个测试程序test.cpp,然后编写makefile,内容参考如下

CC = /usr/bin/arm-linux-gnueabihf-gcc
#AR = /usr/bin/arm-linux-gnueabihf-ar
CFLAGS += -I./include
LDFLAGS = -lstdc++  -lrt -lpthread
LDFLAGS += -L./libs/opencv -lopencv_core -lopencv_highgui -lopencv_imgproc -lm
LDFLAGS += -L./libs/3rd -lzlib

TARGET =  test.exe
#TARGET = libXXX.a
(TARGET) : test.o
	$(CC) -o $(TARGET) $^ $(LDFLAGS) -static
       #$(AR) r $(TARGET) $^

test.o: test.cpp
	$(CC) -c $(CFLAGS) $^

clean :
	rm -rf test.o $(TARGET)


附:将静态库加上新文件打包成新的静态库

由于项目需求,要将别人提供的静态库加上新功能重新打包成静态库,网上找了很多资料,都说用

ar r new.a xxx.o old.a

就可以,但真正链接的时候,提示找不到old.a中的函数。用 ar t new.a 查看,old.a是作为一个整体打进了new.a。

解决方法,只能将新代码xxx.o追加到old.a中,命令如下

ar r old.a xxx.o


 
  

makefile编写参考文章:

跟我一起写 Makefile(一)

 交叉编译用到的Makefile模板。

makefile 路径设置

Makefile编译目录下多个文件

Makefile 连接静态库注意事项

makefile 生成/使用静态库

gcc和g++的区别 →

makefile学习经验(一)----初涉makefile

makefile学习经验(二)----编译生成静态库文件

makefile学习经验(三)----编译生成动态库文件(方式一)

makefile学习经验(四)----编译生成动态库文件(方式二)

怎么编写Makefile生成静态库


编译链接出现的错误和解决:

← undefined reference to `std::ios_base::Init::Init() 解决

ARM compilation error, VPF registered used by executable, not object file

-mfloat-abi=softfp的问题,指定fpu为neon


交叉编译glibc相关

关于交叉编译glibc 2.11.1

文章有点过时,最新的glibc2.19,ports已经含在源码中了。


你可能感兴趣的:(图形,Linux&Unix)