C++ C++;科马克公司;boost&;arm交叉编译

C++ C++;科马克公司;boost&;arm交叉编译,c++,boost,cmake,arm,cross-compiling,C++,Boost,Cmake,Arm,Cross Compiling,我在使用boost和cmake编译程序时遇到问题。我使用gcc-linaro-arm-linux-gnueabihf-4.9/bin/arm-linux-gnueabihf-g++编译器进行交叉编译。 现在我有了一个像这样的cmake文件: cmake_minimum_required (VERSION 2.6.2) project (xxx) SET(CMAKE_CXX_COMPILER /home/kamil/gcc-linaro-arm-linux-gnueabihf-4.9/bin/a

我在使用boost和cmake编译程序时遇到问题。我使用gcc-linaro-arm-linux-gnueabihf-4.9/bin/arm-linux-gnueabihf-g++编译器进行交叉编译。 现在我有了一个像这样的cmake文件:

cmake_minimum_required (VERSION 2.6.2)
project (xxx)

SET(CMAKE_CXX_COMPILER /home/kamil/gcc-linaro-arm-linux-gnueabihf-4.9/bin/arm-linux-gnueabihf-g++)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread -Dtypeof=__typeof__ -D_GLIBCXX_USE_CXX11_ABI=0 -Wall -Werror -Wextra -Wno-error=array-bounds")

if(DEFINED ENV{SDKTARGETSYSROOT})
    set(CMAKE_FIND_ROOT_PATH $ENV{SDKTARGETSYSROOT})
    set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
    set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
    set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
endif(DEFINED ENV{SDKTARGETSYSROOT})

find_package(Boost COMPONENTS system filesystem REQUIRED)

include_directories("/usr/local/include")
include_directories(${Boost_INCLUDE_DIRS})

enable_testing()
set(CMAKE_CTEST_COMMAND ctest -V)
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} )

add_subdirectory(src)
add_subdirectory(test EXCLUDE_FROM_ALL)

现在在linux(Ubuntu)中使用命令时:

  • 克马克
  • 制造
我的回应是:

kamil@kamil:~/test/build$ rm -rf *
kamil@kamil:~/test/build$ cmake ..
-- The C compiler identification is GNU 4.8.4
-- The CXX compiler identification is GNU 4.8.4
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Boost version: 1.55.0
-- Found the following Boost libraries:
--   system
--   filesystem
-- Found GTest: /usr/local/lib/libgtest.so  
-- Configuring done
-- Generating done
-- Build files have been written to: /home/kamil/test/build
kamil@kamil:~/test/build$ make
Scanning dependencies of target xxxx
[ 12%] Building CXX object src/CMakeFiles/test.dir/main.cpp.o
In file included from /home/test/src/test/utils/logger.hpp:4:0,
                 from /home/kamil/test/src/main.cpp:9:
/home/kamil/test/src/test/utils/singleton.hpp:5:33: fatal error: boost/noncopyable.hpp: No such file or directory
 #include <boost/noncopyable.hpp>
                                 ^
compilation terminated.
make[2]: *** [src/CMakeFiles/test.dir/main.cpp.o] Error 1
make[1]: *** [src/CMakeFiles/test.dir/all] Error 2
make: *** [all] Error 2
那么一切都好了

我使用命令在Ubuntu中安装boost:
sudoapt-get-install-libboost1.55-all-dev


使用linux-gnueabihf-g++编译有什么问题以及如何修复。

使用gcc-linaro-arm-linux-gnueabihf-4.9编译boost是可行的。
帮助链接:

交叉编译时,需要为目标计算机而不是为宿主计算机(在其上构建项目)构建所有库。此外,在CMake上,交叉编译通常意味着使用,这不仅设置了编译器,还设置了目标体系结构、库路径等。虽然Tsyarev的观点是正确的,一般来说,您需要为目标平台编译依赖项,但Boost的情况可能不必这样做。Boost的许多功能都是“仅标题”的,因此,您可能不必使用linaro工具链实际构建Boost。如果通过调用“make VERBOSE=1”运行make,那么输出是什么?您应该看到通过-I标志传递给编译器的boost头路径。看起来它没有正确通过。你是对的。使用“make VERBOSE=1”时,我看不到-I标志,它带有boost文件的路径。那么我应该用linaro工具链构建boost吗?像这样的:?然后一切都会好起来?我还应该做什么?尝试添加
target\u include\u目录(xxxx PRIVATE${Boost\u include\u DIRS})
。这将为您的目标添加正确的包含。结果相同。“致命错误:boost/noncopyable.hpp:没有这样的文件或目录”。
kamil@kamil:~/test/build$ rm -rf *
kamil@kamil:~/test/build$ cmake ..
-- The C compiler identification is GNU 4.8.4
-- The CXX compiler identification is GNU 4.8.4
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Boost version: 1.55.0
-- Found the following Boost libraries:
--   system
--   filesystem
-- Found GTest: /usr/local/lib/libgtest.so  
-- Configuring done
-- Generating done
-- Build files have been written to: /home/kamil/test/build
kamil@kamil:~/test/build$ make
Scanning dependencies of target xxxx
[ 12%] Building CXX object src/CMakeFiles/test.dir/main.cpp.o
In file included from /home/test/src/test/utils/logger.hpp:4:0,
                 from /home/kamil/test/src/main.cpp:9:
/home/kamil/test/src/test/utils/singleton.hpp:5:33: fatal error: boost/noncopyable.hpp: No such file or directory
 #include <boost/noncopyable.hpp>
                                 ^
compilation terminated.
make[2]: *** [src/CMakeFiles/test.dir/main.cpp.o] Error 1
make[1]: *** [src/CMakeFiles/test.dir/all] Error 2
make: *** [all] Error 2
fatal error: boost/noncopyable.hpp: No such file or directory
     #include <boost/noncopyable.hpp>
SET(CMAKE_CXX_COMPILER /home/kamil/toradex/gcc-linaro-arm-linux-gnueabihf-4.9/bin/arm-linux-gnueabihf-g++)