记录libzmq的交叉编译及静态库、动态库的调用

交叉编译,错误的爆发如海啸…

整整搞了我两天。之前简单的程序以及静态库交叉编译都成功了,我还沾沾自喜,没想到一涉及到大型项目,多重调用就GG。淦!

来说正题~

背景

手上的一个项目,有多个模块,每个模块有一堆类组成,这个模块还调用好多个静态库/动态库。需求是要把这个模块编译后也生成静态库来供一个main.exe调用。哦忘了,这一系列操作都是要交叉编译环境下的。交代完毕。

一. 交叉编译libzmq源码

传送门
这里提醒一下,有两点比较注意。

  1. 就是 ./configure修改配置这里:

host和target参数,内容一致, 必须确认和你的arm交叉编译工具链的前缀是一样的!而不是简简单单的arm-linux就可以。 比如我自己因为这个原因,重新编译了一下。 改成了arm-linux-gnueabihf

在这里插入图片描述
这个错误就是我第一次编译生成的库和其他生成的库不是一个编译器,导致无法识别该库。

  1. 就是libzmq在第二次重新编译时,前面步骤不变,但是如果./configure没有修改 –prefix参数,仍然和第一次在同一路径下保存生成的文件的话,会报一个错误:没有权限在该目录下创建文件。此时解决问题的办法:

修改–prefix参数,换一个路径就可以。

二. 交叉编译其它静态库

传送门

三. 项目链接静态库/动态库自己再生成静态库

贴上CMakeLists.txt内容:

# CMake最低版本要求
cmake_minimum_required(VERSION 2.8)

# 设置目标系统
set(CMAKE_SYSTEM_NAME Linux)
set(USER_PATH "/home/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux")

# 设置工具链目录
set(tools ${USER_PATH}/bin/arm-linux-gnueabihf-g++)

# 设置编译器位置
set(CMAKE_C_COMPILER ${USER_PATH}/bin/arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER ${USER_PATH}/bin/arm-linux-gnueabihf-g++)

set(CMAKE_CROSSCOMPILING TRUE)
set(CMAKE_SYSTEM_PROCESSOR arm)
 
set(CMAKE_FIND_ROOT_PATH ${USER_PATH})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) 
 
# 项目信息
project(DataCollect)

# C++11支持
add_definitions(-std
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值