对于我的程序,我想使用一些boost库,但是当我创建程序时,我得到了错误:
/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 `__cxa_throw_bad_array_new_length@CXXABI_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/。为了获得提升,我在raspberry pi上使用了apt install 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})
我该如何解决这个问题?
答案 0 :(得分:1)
您正在进行交叉编译,因此您安装了特定的工具链(编译器,库等)。然后你尝试使用通常的boost库,它们是使用普通的编译器构建的,它依赖于普通的库。失败并不令人惊讶,是吗?
我不知道是否有一种简单的方法,但是使用您的编译器和用于Raspberry Pi的库来编译源代码的提升应该可以解决问题。