在交叉编译时我必须对C++库做什么?

cnd*_*cnd 2 c++ cmake cross-compiling

这是我配置的编译器部分:

IF(UNIX)
    ## Compiler flags

    # specify the cross compiler
    SET(CMAKE_C_COMPILER   /home/username/projects/buildroot/output/host/usr/bin/arm-linux-gcc)
    SET(CMAKE_CXX_COMPILER /home/username/projects/buildroot/output/host/usr/bin/arm-linux-g++)

    if(CMAKE_COMPILER_IS_GNUCXX)
        set(CMAKE_CXX_FLAGS "-O3")
        set(CMAKE_EXE_LINKER_FLAGS "-lsqlite3 -lrt -lpthread")
    endif()

    target_link_libraries(complex
      ${Boost_FILESYSTEM_LIBRARY}
      ${Boost_SYSTEM_LIBRARY})
ENDIF(UNIX)
Run Code Online (Sandbox Code Playgroud)

有3个问题:-lsqlite3 -lrt -lpthread

我如何为我的架构制作它们并在此处指定?如何设置(使用set?)编译库的路径后,我将以某种方式重新编译我的架构?

Mic*_*ild 5

如果你想用CMake进行交叉编译,你真的应该使用工具链文件.有关介绍,请参阅CMake Wiki.为了使用第三方库(即不包括在交叉编译工具链中),您还需要交叉编译它们.

编辑:由于您使用的是buildroot工具链,因此可以使用已包含的CMake工具链文件.只需-DCMAKE_TOOLCHAIN_FILE=/home/username/projects/buildroot/output/toolchainfile.cmake在调用CMake时通过.无需设置CMAKE_C_COMPILER,并CMAKE_CXX_COMPILER在您的CMakeLists.txt文件.此外,设置CMAKE_CXX_FLAGS并被CMAKE_EXE_LINKER_FLAGS认为是非常糟糕的做法.

据推测,您在构建buildroot工具链时已经构建了sqlite3,因此您可以像使用任何其他库一样使用它.即:

find_path(SQLITE3_INCLUDE_DIR sqlite3.h)
find_library(SQLITE3_LIBRARY sqlite3)
if(NOT SQLITE3_INCLUDE_DIR)
  message(SEND_ERROR "Failed to find sqlite3.h")
endif()
if(NOT SQLITE3_LIBRARY)
  message(SEND_ERROR "Failed to find the sqlite3 library")
endif()

find_package(Threads REQUIRED)

# ...

target_link_libraries(complex
  ${Boost_FILESYSTEM_LIBRARY}
  ${Boost_SYSTEM_LIBRARY}
  ${SQLITE3_LIBRARY}
  ${CMAKE_THREAD_LIBS_INIT}
  rt)
Run Code Online (Sandbox Code Playgroud)

最后,不要设置CMAKE_CXX_FLAGS-O3.用户应该-DCMAKE_BUILD_TYPE=Release在配置项目时通过.