如何在手臂上使用节俭 我试图在我的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代码)。此代码与平
谢谢。关于你的两点:
- 目标平台的工具链
- boost的交叉编译版本
- openssl的交叉编译版本
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"