【问题标题】:What must I do with C++ libraries on cross compilation?在交叉编译时我必须如何处理 C++ 库?
【发布时间】:2012-04-25 11:54:05
【问题描述】:

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

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)

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

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

【问题讨论】:

    标签: c++ cmake cross-compiling


    【解决方案1】:

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

    编辑:由于您使用的是 buildroot 工具链,因此您可以使用已经包含的 CMake 工具链文件。调用 CMake 时只需传递 -DCMAKE_TOOLCHAIN_FILE=/home/username/projects/buildroot/output/toolchainfile.cmake。无需在您的CMakeLists.txt 文件中设置CMAKE_C_COMPILERCMAKE_CXX_COMPILER。此外,设置CMAKE_CXX_FLAGSCMAKE_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)
    

    最后,不要将CMAKE_CXX_FLAGS 设置为-O3。用户在配置项目时应传递-DCMAKE_BUILD_TYPE=Release

    【讨论】:

    • 我正在使用 buildroot 工具链
    【解决方案2】:

    您还必须交叉编译依赖项。路径取决于您安装它们的位置。

    顺便说一句,使用-lpthread 不是获取 POSIX 线程的安全方法。您应该为编译器和链接器提供选项-pthread

    【讨论】:

      猜你喜欢
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-28
      相关资源
      最近更新 更多