最近试着把16M widora环境下的mraa库文件复制到32M widora环境下,发现调用库时发生segmentation fault错误! 折腾
了好一阵,在网上查了一堆资料,乱冲乱撞地查看代码,居然有所发现,最后终于将mraa库文件在32M widora环境下 交叉编译
成功! 现将过程分享如下:
1. git clone https://github.com/sergev/mraa 下载代码, 此处MRAA源码支持MT7688 mips架构。
2. 修改 mraa下CMakeLists.txt文件,增加如下SET设置 (相应的目录请根据自己环境配置设定):
cmake_minimum_required (VERSION 2.8)
project (mraa C)
#---- for cross compile ------
SET (CMAKE_SYSTEM_NAME Linux)
SET (CMAKE_SYSTEM_PROCESSOR MIPS) (好像不必要!!!)
SET (TOOLCHAIN_DIR "/home/midas/openwrt_widora/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2")
SET (CMAKE_FIND_ROOT_PATH "/home/midas/openwrt_widora/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2")
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_C_COMPILER "/home/midas/openwrt_widora/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-gcc")
SET (CMAKE_CXX_COMPILER "/home/midas/openwrt_widora/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-g++")
#set(SWIG_EXECUTABLE "/usr/bin/swig")
set(SWIG_DIR "/usr/bin/swig")
FIND_PACKAGE (Threads REQUIRED)
... ...
3. 修改 mraa/src/mips/mips.c 文件, 注释掉if部分,增加一句 platform_type = MRAA_MTK_LINKIT;
/*
if (fh != NULL) {
… …
… …
}
free(line);
*/
platform_type = MRAA_MTK_LINKIT;
… …
4. 修改 mraa/cmake_install.cmake文件,设置安装位置.
… …
#-------- Set the install prefix ---------------
IF(NOT DEFINED CMAKE_INSTALL_PREFIX)
SET(CMAKE_INSTALL_PREFIX "/home/midas/mraa/build") (设置编译生成文件存放的位置)
ENDIF(NOT DEFINED CMAKE_INSTALL_PREFIX)
STRING(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
... ...
5. 在mraa目录下执行cmake . (注意后面有一点)
6. 在mraa目录下执行make, 如果只需要libmraa.so库,那么执行到Linking C shared library libmraa.so时就ok了.
7. 在mraa目录下执行make install, 在mraa/build位置生成include, lib 和 share 文件夹,存放着相应的头文件和库文件。其中 share/mraa/exampels 下面有库的各种应用例子,很有参考价值