2017-06-22 9 views
0

は、私はいくつかのBoostライブラリを使用したいが、私はプログラムを作るとき、私はエラーを取得する: cmakeのクロスコンパイルブーストリンクエラー

/home/ubunturik/rpinew/rootfs/usr/lib/arm-linux-gnueabihf/libboost_regex.so: undefined reference to `std::__throw_out_of_range_fmt(char const*, ...)@GLIBCXX_3.4.20' 
/home/ubunturik/rpinew/rootfs/usr/lib/arm-linux-gnueabihf/libicuuc.so.52: undefined reference to `[email protected]_1.3.8' 
collect2: error: ld returned 1 exit st 

が、私はこのチュートリアル http://amgaera.github.io/blog/2014/04/10/cross-compiling-for-raspberry-pi-on-64-bit-linux/を追いました。私は、ラズベリーパイにlibboost-all-devをインストールし、それらのファイルを使用した。

cmakeのファイル:私はこの問題を解決するにはどうすればよい

cmake_minimum_required(VERSION 3.5) 
SET(CMAKE_SYSTEM_NAME Linux) 
SET(CMAKE_SYSTEM_VERSION 1) 

# Specify the cross compiler 
SET(CMAKE_C_COMPILER $ENV{HOME}/rpinew/toolchain/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gcc) 
SET(CMAKE_CXX_COMPILER $ENV{HOME}/rpinew/toolchain/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++) 

# Where is the target environment 
SET(CMAKE_FIND_ROOT_PATH $ENV{HOME}/rpinew/rootfs) 
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --sysroot=${CMAKE_FIND_ROOT_PATH}") 
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} --sysroot=${CMAKE_FIND_ROOT_PATH}") 
SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} --sysroot=${CMAKE_FIND_ROOT_PATH}") 

# Search for programs only in the build host directories 
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 

# Search for libraries and headers only in the target directories 
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 

#for boost 
set(Boost_INCLUDE_DIR /home/ubunturik/rpinew/rootfs/usr/include) 
set(Boost_LIBRARY_DIR /home/ubunturik/rpinew/rootfs/usr/lib/arm-linux-gnueabihf) 
find_package(Boost COMPONENTS regex date_time system chrono filesystem program_options thread REQUIRED) 
include_directories(${Boost_INCLUDE_DIR}) 
link_directories(${Boost_LIBRARY_DIR}) 

#Bring the headers, such as Student.h into the project 
include_directories(include) 

include_directories($ENV{HOME}/rpinew/rootfs/usr/include/arm-linux-gnueabihf) 

#However, the file(GLOB...) allows for wildcard additions: 
file(GLOB SOURCES "src/*.cpp") 

add_executable(MonitorApp ${SOURCES}) 
target_link_libraries(MonitorApp ${PROJECT_LINK_LIBS} ${Boost_LIBRARIES}) 

答えて

1

あなたは特定のツールチェーン(コンパイラ、ライブラリなど)をインストールしたので、クロスコンパイルの対象となります。その後、普通のコンパイラを使ってビルドされ、普通のlibsに依存する通常のboostライブラリを使ってみました。失敗はそれほど驚くべきことではありませんか?

シンプルな方法があるのか​​どうかわかりませんが、コンパイラを使ってソースコードからコンパイルすると、ラズベリーパイ用のライブラリが役立ちます。