简介
为了在epc287 arm板子上运行rabbitmq,提高数据传输的可靠性、稳定性,需要将rabbitmq 交叉编译为arm可使用的库。
过程
-
在https://github.com/alanxz/rabbitmq-c/releases/tag/v0.9.0网站下载rabbitmq-c源码,并解压
-
在源码目录下新建文件夹 build
-
在build目录下新建文件ToolChain.cmake
内容如下:set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_VERSION 1) set(CMAKE_C_COMPILER "arm-fsl-linux-gnueabi-gcc") set(CMAKE_CXX_COMPILER "arm-fsl-linux-gnueabi-g++") SET(CMAKE_FIND_ROOT_PATH "/opt/arm-fsl-linux-gnueabi") SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) SET(OPENSSL_INCLUDE_DIR "/opt/openssl/include") SET(OPENSSL_LIBRARIES "/opt/openssl/lib") SET(OPENSSL_ROOT_DIR "/opt/openssl") SET(OPENSSL_CRYPTO_LIBRARY "/opt/openssl/lib/libcrypto.a" ) SET(OPENSSL_SSL_LIBRARY "/opt/openssl/lib/libssl.a") SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
其中,arm-fsl-linux-gnueabi-gcc 为EPC287的交叉编译环境,根据实际路径更改
编译过程中,需要openssl支持,openssl也需要预先交叉编译好以后放在/opt/openssl目录中 -
在build目录下运行
cmake -DCMAKE_TOOLCHAIN_FILE=./ToolChain.cmake ..
如果正常,结果如下:
在编译过程中,出现undefined reference `dlopen’ 等错误,解决办法是在CMakeLists.txt这一段代码的倒数第三行,增加 -ldlif (MSVC) set(CMAKE_C_FLAGS "/W4 /nologo ${CMAKE_C_FLAGS}") elseif (CMAKE_C_COMPILER_ID MATCHES ".*Clang") set(CMAKE_C_FLAGS "-Wall -Wextra -Wstrict-prototypes -Wno-unused-function -fno-common -fvisibility=hidden ${CMAKE_C_FLAGS}") elseif (CMAKE_COMPILER_IS_GNUCC) set(RMQ_C_FLAGS "-Wall -Wextra -Wstrict-prototypes -Wno-unused-function -fno-common") execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) if (GCC_VERSION VERSION_GREATER 4.0 OR GCC_VERSION VERSION_EQUAL 4.0) set(RMQ_C_FLAGS "${RMQ_C_FLAGS} -fvisibility=hidden") endif() set(CMAKE_C_FLAGS "-ldl ${RMQ_C_FLAGS} ${CMAKE_C_FLAGS}") message(STATUS "COMPILIER : CMAKE_COMPILER_IS_GNUCC") endif ()
-
运行 cmake --build .