如何在手臂上使用节俭 我试图在我的ARM设备上使用C++和JavaScript的节俭,这个项目是在Linux主机上用这个ARM设备的井手来构建的。

如何在手臂上使用节俭 我试图在我的ARM设备上使用C++和JavaScript的节俭,这个项目是在Linux主机上用这个ARM设备的井手来构建的。,arm,cross-platform,cross-compiling,thrift,Arm,Cross Platform,Cross Compiling,Thrift,我的问题是,何时以及如何使用交叉编译 有两个可能的步骤: 当我安装thrift时(有一个主机配置选项,但我不知道应该简单地使用“arm”还是工具链) 2当我使用thrift命令和一些选项生成源代码时 我在这里感到困惑 谢谢。关于你的两点: 是的,您需要交叉编译目标平台的thrift库。交叉编译服务器时,它必须链接到此库 不,您不需要交叉编译thrift编译器。thrift编译器是一个源到源编译器。它只需在开发平台上运行,就可以将协议定义转换为C++代码(或JavaScript代码)。此代码与平

我的问题是,何时以及如何使用交叉编译

有两个可能的步骤:

  • 当我安装thrift时(有一个主机配置选项,但我不知道应该简单地使用“arm”还是工具链)
  • 2当我使用thrift命令和一些选项生成源代码时

    我在这里感到困惑


    谢谢。

    关于你的两点:

  • 是的,您需要交叉编译目标平台的thrift库。交叉编译服务器时,它必须链接到此库

  • 不,您不需要交叉编译thrift编译器。thrift编译器是一个源到源编译器。它只需在开发平台上运行,就可以将协议定义转换为C++代码(或JavaScript代码)。此代码与平台无关,因此thrift编译器不需要了解您的目标平台。然后,您将使用生成的代码,并且在C++的情况下,像您的手写代码一样,将其交叉编译到目标平台。
  • 因此,要在目标设备上运行thrift server,您必须执行以下步骤:

    获取thrift库的交叉编译版本 要求:

    • 目标平台的工具链
    • boost的交叉编译版本
    • openssl的交叉编译版本
    thrift的最新版本附带了一个cmake构建脚本。要使用cmake进行交叉编译,您需要编写一个指向您的工具链(,)的
    toolchain.cmake
    文件。工具链定义可以通过
    -DCMAKE\u toolchain\u文件传递到
    cmake
    :PATH=…

    对于剩下的CMADE选项,除了C++库(或者如果您喜欢C库),几乎可以关闭所有的东西:

    (根据您的设置,可能需要一些附加选项来指向boost和openssl,但如果不了解更多关于您的工具链的信息,我就无法确定。)

    生成过程将生成thrift库的目标版本:

    ./out/lib/libthriftd.so
    
    使用主机thrift编译器生成代码

    在您的主机系统上运行节省编译器,从协议规范中生成C++代码(或者使用宿主系统提供的节省编译程序的预编译版本,或者为您的主机系统编译节省时间,使用<代码> BuugDy编译器< /COD>标志激活)。

    这导致文件夹中的C++文件>代码> /Gen CPP < /代码> ./P> 交叉编译代码 交叉编译手动编写的服务器代码,以及

    /gen cpp
    中生成的代码

    因此,例如,如果您有一个
    Server.cpp
    ,您可以编写以下
    CMakeLists.txt

    project( my-server CXX )
    
    set( THRIFT_FILES
        ${CMAKE_CURRENT_SOURCE_DIR}/gen-cpp/HelloWorld.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/gen-cpp/HelloWorld.h
        ${CMAKE_CURRENT_SOURCE_DIR}/gen-cpp/protocol_constants.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/gen-cpp/protocol_constants.h
        ${CMAKE_CURRENT_SOURCE_DIR}/gen-cpp/protocol_types.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/gen-cpp/protocol_types.h
    )
    
    add_library(
        my-generated-code
        OBJECT ${THRIFT_FILES}
    )
    
    add_executable(${PROJECT_NAME}
        ${CMAKE_CURRENT_SOURCE_DIR}/Server.cpp
        $<TARGET_OBJECTS:my-generated-code>
    )
    
    target_link_libraries(${PROJECT_NAME} thriftd)
    
    根据您的设置,您可能需要额外的选项来将cmake指向交叉编译的
    libthriftd.so
    ,这是在第一节中获得的。在
    out
    文件夹中,运行
    make
    。这将为您提供一个目标二进制文件
    /out/my server

    然后可以将
    my server
    二进制文件和
    libthriftd.so
    部署到目标系统。这应该允许您在目标系统上运行
    my server
    ,并使用主机系统上运行的匹配客户端连接到服务器

    thrift --gen cpp path/to/your/protocol.thrift
    
    project( my-server CXX )
    
    set( THRIFT_FILES
        ${CMAKE_CURRENT_SOURCE_DIR}/gen-cpp/HelloWorld.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/gen-cpp/HelloWorld.h
        ${CMAKE_CURRENT_SOURCE_DIR}/gen-cpp/protocol_constants.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/gen-cpp/protocol_constants.h
        ${CMAKE_CURRENT_SOURCE_DIR}/gen-cpp/protocol_types.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/gen-cpp/protocol_types.h
    )
    
    add_library(
        my-generated-code
        OBJECT ${THRIFT_FILES}
    )
    
    add_executable(${PROJECT_NAME}
        ${CMAKE_CURRENT_SOURCE_DIR}/Server.cpp
        $<TARGET_OBJECTS:my-generated-code>
    )
    
    target_link_libraries(${PROJECT_NAME} thriftd)
    
    cmake -S . -B out -DCMAKE_TOOLCHAIN_FILE:PATH="path/to/toolchain.cmake"