2017-06-22 1 views
0

Pour mon programme je veux utiliser des bibliothèques Boost, mais quand je fais le programme que j'obtiens l'erreur:CMake d'erreur de lien boost cross compilation

/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 

J'ai suivi ce tutoriel http://amgaera.github.io/blog/2014/04/10/cross-compiling-for-raspberry-pi-on-64-bit-linux/. Pour obtenir boost, j'ai utilisé apt pour installer libboost-all-dev sur le framboise pi et utilisé ces fichiers.

fichier 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}) 

Comment puis-je résoudre ce problème?

Répondre

1

Vous vous dirigez vers la compilation croisée, vous avez donc installé une chaîne d'outils spécifique (compilateur, libs, etc.). Ensuite, vous avez essayé d'utiliser les bibliothèques boost habituelles, qui ont été construites en utilisant un compilateur ordinaire et qui dépend des bibliothèques ordinaires. L'échec n'est pas si surprenant, n'est-ce pas? Je ne sais pas s'il existe un moyen simple, mais compiler boost à partir du code source en utilisant votre compilateur et les bibliothèques destinées à Raspberry Pi devrait faire l'affaire.