简而言之,我试图用CMake交叉编译CMake,并且我不认为我正确链接了库。我想做的事情可能是不可能的,但我至少想知道为什么在这种情况下是不可能的。如何通过CMake交叉编译CMake的代码
系统:主机是一个Linux box与Cavium ARM9 CPU。目前它正在运行Linux内核版本2.6.24.4和Debian 5.0(Lenny)。我的工作站是运行Ubuntu 12.04 LTS(Precise Pangolin)的Core i5。
我的总体目标是让ROS在Linux机器上运行。我必须从源代码编译而不是使用apt,因为Debian 6.0(Squeeze)二进制文件需要拇指支持Cavium没有提供,并且Debian 5.0(Lenny)没有提供很多所需的软件包。我已经取得了进展,安装所需的各种库,但是当我步骤1.3.1并尝试运行CMake时,出现错误
需要CMake 2.8或更高版本。你正在运行的版本2.6.0
接下来,我试图下载和建立Linux机箱本身CMake 2.8.8,但它对系统来说太多了。当失败时,我下载了制造商网站上建议的工具链,并使用[www.cmake.org/Wiki/CMake_Cross_Compiling]上的交叉编译指南来构建CMake可执行文件。这里是我的工具链文件:
# This one is important
SET(CMAKE_SYSTEM_NAME Linux)
# Specify the cross compiler
SET(CMAKE_C_COMPILER /pathto/crosstool-linux-gcc-4.5.2-gclibc-2.9-oabi/arm-unknown-linux-gnu/bin/arm-unknown-linux-gnu-gcc)
SET(CMAKE_CXX_COMPILER /pathto/crosstool-linux-gcc-4.5.2-gclibc-2.9-oabi/arm-unknown-linux-gnu/bin/arm-unknown-linux-gnu-g++)
# Where is the target environment
SET(CMAKE_FIND_ROOT_PATH /pathto/crosstool-linux-gcc-4.5.2-gclibc-2.9-oabi/arm-unknown-linux-gnu /pathto/crosstool-linux-gcc-4.5.2-gclibc-2.9-oabi/arm-unknown-linux-gnu/arm-unknown-linux-gnu)
# Search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# For libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
然而,使用在Linux中的二进制给出了错误
cmake的:/usr/lib/libstdc++.so.6:版本`GLIBCXX_3.4.14 “未找到(由CMake的需要)
果然,图书馆是不是有:
prompt# strings /usr/lib/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBC_2.3
GLIBC_2.0
GLIBC_2.3.2
GLIBC_2.1
GLIBC_2.1.3
GLIBC_2.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
我从来没有交叉编译过,但我可以看到两种情况之一发生:无论是在主机上创建链接到更高版本的glibcxx或制造商的工具链的二进制文件比它们的图像更现代。我不知道如何检查正在发生的事情,或者是否发生了我不知道的其他事情。
我最后的努力涉及试图静态交叉编译CMake的,希望能够摆脱连接错误与
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchain-technologic.cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXE_LINKER_FLAGS_RELEASE="-static" ..
我生成错误,而二进制也不能工作。我:
FATAL: kernel too old
Segmentation fault
我想尝试在Linux中安装glibcxx 3.4.14,但它看起来并不像它的可用了这款处理器。
我试过寻找CMake依赖或系统需求,但找不到任何东西。我也搜索过如何构建CMake,但大多数搜索都是关于如何构建其他东西与 CMake而不是构建CMake本身。
我的印象是,cmake不支持交叉编译,因为它似乎不包括支持在目标平台上运行二进制文件自动配置测试。我错了吗? – schily