如何交叉编译C++并构建成python库

如何交叉编译C++并构建成python库

1. 交叉编译python

  • python版本要和目标平台一致, 本文以python3.10为例
python3 --version
# Python 3.10.12

下载python安装包

wget https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tgz
ls -lh Python-3.10.0.tgz # 查看完整性
tar -xzf Python-3.10.0.tgz
  • 编译
mkdir -p /workspace/python3.10-aarch64
cd /workspace/python3.10-aarch64

echo "ac_cv_file__dev_ptmx=yes" > /workspace/config.site
echo "ac_cv_file__dev_ptc=yes" >> /workspace/config.site
export CONFIG_SITE=/workspace/config.site

/workspace/Python-3.10.0/configure --host=aarch64-linux-gnu --build=x86_64-linux-gnu --prefix=/workspace/python3.10-aarch64/install --enable-shared --enable-ipv6 --disable-static --with-ensurepip=yes

make
make install

2. 交叉编译pybind11

编写交叉编译工具链

aarch64-toolchain.cmake

# aarch64-toolchain.cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)

# 设置交叉编译器
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)

# 设置路径(根据实际安装路径调整)
# set(CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu)
set(CMAKE_FIND_ROOT_PATH /workspace/python3.10-aarch64/install)

# 只在目标平台上查找库和头文件
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

git clone https://github.com/pybind/pybind11.git
cd pybind11/
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=aarch64-toolchain.cmake -DCMAKE_INSTALL_PREFIX=/workspace/python3.10-aarch64/install ..

make
make install

3. 交叉编译demo

demo 组成

.
├── CMakeLists.txt
├── aarch64-toolchain.cmake
├── bindings
│   └── python_bindings.cpp
├── build
├── include
│   └── my_math_lib
│       └── math_operations.h
├── src
│   └── math_operations.cpp
└── test.py

math_operations.h

// include/my_math_lib/math_operations.h

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值