news 2026/4/3 5:03:32

CLANG 交叉编译

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CLANG 交叉编译

boost+clang+

cd /root/dev_mipsel/boost # 清理之前的编译 rm -rf stage bin.v2 # 创建 clang 工具链配置 cat > user-config.jam << 'EOF' using clang : mipsel : clang++ --target=mipsel-linux-gnu --sysroot=/usr/mipsel-linux-gnu : <cxxflags>-fPIC <cxxflags>-march=mips32r2 <cxxflags>-mabi=32 <cflags>-fPIC <linkflags>--target=mipsel-linux-gnu <linkflags>--sysroot=/usr/mipsel-linux-gnu <linkflags>-fuse-ld=lld ; EOF # 配置并编译 Boost ./bootstrap.sh --with-toolset=clang # 编译 Boost ./b2 -j$(nproc) \ toolset=clang-mipsel \ target-os=linux \ architecture=mips \ address-model=32 \ binary-format=elf \ abi=o32 \ cxxflags="-fPIC --target=mipsel-linux-gnu --sysroot=/usr/mipsel-linux-gnu" \ linkflags="--target=mipsel-linux-gnu --sysroot=/usr/mipsel-linux-gnu -fuse-ld=lld" \ variant=release \ link=static \ runtime-link=shared \ --user-config=user-config.jam \ stage

CMakeLists.txt

cmake_minimum_required(VERSION 3.10) project(ppp LANGUAGES C CXX) # 设置 Clang 交叉编译标志 set(CMAKE_C_COMPILER clang) set(CMAKE_CXX_COMPILER clang++) set(CMAKE_C_COMPILER_TARGET mipsel-linux-gnu) set(CMAKE_CXX_COMPILER_TARGET mipsel-linux-gnu) # 添加目标特定的标志 add_compile_options( --target=mipsel-linux-gnu --sysroot=/usr/mipsel-linux-gnu -fPIC -march=mips32r2 -mabi=32 -O3 -std=c++17 ) # 链接器标志 add_link_options( --target=mipsel-linux-gnu --sysroot=/usr/mipsel-linux-gnu -fuse-ld=lld -static-libstdc++ ) # 查找 Boost 库 set(BOOST_ROOT "/root/dev_mipsel/boost") set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_STATIC_RUNTIME OFF) find_package(Boost REQUIRED COMPONENTS system coroutine thread context regex filesystem) # 添加可执行文件 add_executable(ppp main.cpp ...) # 链接库 target_link_libraries(ppp ${Boost_LIBRARIES} ssl crypto pthread dl atomic )

Test:

cmake_minimum_required(VERSION 3.10) project(ppp LANGUAGES C CXX) # 设置 Clang 交叉编译标志 set(CMAKE_C_COMPILER clang) set(CMAKE_CXX_COMPILER clang++) set(CMAKE_C_COMPILER_TARGET mipsel-linux-gnu) set(CMAKE_CXX_COMPILER_TARGET mipsel-linux-gnu) # 添加目标特定的标志 add_compile_options( --target=mipsel-linux-gnu --sysroot=/usr/mipsel-linux-gnu -fPIC -march=mips32r2 -mabi=32 -O3 -std=c++17 ) # 链接器标志 add_link_options( --target=mipsel-linux-gnu --sysroot=/usr/mipsel-linux-gnu -fuse-ld=lld -static-libstdc++ ) # 查找 Boost 库 set(BOOST_ROOT "/root/dev_mipsel/boost") set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_STATIC_RUNTIME OFF) find_package(Boost REQUIRED COMPONENTS system coroutine thread context regex filesystem) # 添加可执行文件 add_executable(ppp main.cpp ...) # 链接库 target_link_libraries(ppp ${Boost_LIBRARIES} ssl crypto pthread dl atomic )

build.SH

#!/bin/bash # build-mips-clang.sh # 设置环境变量 export CC="clang --target=mipsel-linux-gnu --sysroot=/usr/mipsel-linux-gnu" export CXX="clang++ --target=mipsel-linux-gnu --sysroot=/usr/mipsel-linux-gnu" export CFLAGS="-fPIC -march=mips32r2 -mabi=32 -O3" export CXXFLAGS="-fPIC -march=mips32r2 -mabi=32 -O3 -std=c++17" export LDFLAGS="--target=mipsel-linux-gnu --sysroot=/usr/mipsel-linux-gnu -fuse-ld=lld" export AR="llvm-ar" export RANLIB="llvm-ranlib" export STRIP="llvm-strip" # 清理并创建构建目录 rm -rf build-mips-clang mkdir build-mips-clang && cd build-mips-clang # 配置 CMake cmake .. \ -DCMAKE_SYSTEM_NAME=Linux \ -DCMAKE_SYSTEM_PROCESSOR=mipsel \ -DCMAKE_C_COMPILER=clang \ -DCMAKE_C_COMPILER_TARGET=mipsel-linux-gnu \ -DCMAKE_CXX_COMPILER=clang++ \ -DCMAKE_CXX_COMPILER_TARGET=mipsel-linux-gnu \ -DCMAKE_C_FLAGS="${CFLAGS}" \ -DCMAKE_CXX_FLAGS="${CXXFLAGS}" \ -DCMAKE_EXE_LINKER_FLAGS="${LDFLAGS}" \ -DCMAKE_SHARED_LINKER_FLAGS="${LDFLAGS}" \ -DCMAKE_AR="llvm-ar" \ -DCMAKE_RANLIB="llvm-ranlib" \ -DCMAKE_STRIP="llvm-strip" \ -DBOOST_ROOT=/root/dev_mipsel/boost \ -DBoost_USE_STATIC_LIBS=ON \ -DCMAKE_BUILD_TYPE=Release # 构建 make -j$(nproc)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/30 20:07:37

大文件上传中断?建议使用支持断点续传的客户端

大文件上传中断&#xff1f;建议使用支持断点续传的客户端 在AI数字人视频生成系统日益普及的今天&#xff0c;一个看似不起眼的问题正悄然影响着生产效率——大文件上传失败后必须重来。想象一下&#xff1a;你正在为一场企业发布会准备10段高清数字人视频&#xff0c;每段素材…

作者头像 李华
网站建设 2026/4/2 9:28:44

ASG如何修改管理员密码

本文档提供了ASG系列产品的维护指导。 文章目录如何修改管理员密码如何修改管理员密码 管理员首次登录时&#xff0c;系统会提示修改密码。如需要再次修改密码&#xff0c;则需要选择“系统管理 > 管理员 > 管理员”进入管理员配置页面&#xff0c;单击对应的管理员操作…

作者头像 李华
网站建设 2026/3/30 20:22:19

Linux权限问题导致HeyGem无法写入日志文件?

Linux权限问题导致HeyGem无法写入日志文件&#xff1f; 在部署本地AI应用时&#xff0c;你是否遇到过这样的情况&#xff1a;程序看似正常启动&#xff0c;但日志一片空白&#xff0c;页面卡顿无响应&#xff0c;终端也没有明确报错&#xff1f;深入排查后才发现&#xff0c;原…

作者头像 李华
网站建设 2026/4/2 21:08:07

如何为HeyGem贡献代码?GitHub仓库提交PR指南

如何为 HeyGem 贡献代码&#xff1f;一次真正意义上的开源协作实践 你有没有遇到过这样的情况&#xff1a;发现一个开源 AI 项目很棒&#xff0c;想修个 bug 或加个小功能&#xff0c;却卡在“到底该怎么提交 PR”这一步&#xff1f;尤其当项目涉及音视频处理、模型推理和 Web…

作者头像 李华
网站建设 2026/4/3 3:29:25

【PHP图像识别结果解析】:手把手教你精准提取与处理识别数据

第一章&#xff1a;PHP图像识别结果解析概述在现代Web应用中&#xff0c;图像识别技术逐渐成为提升用户体验和自动化处理能力的重要手段。PHP作为广泛使用的服务器端脚本语言&#xff0c;虽然本身不直接提供图像识别功能&#xff0c;但可通过集成第三方API或调用Python等语言编…

作者头像 李华
网站建设 2026/3/20 22:12:18

【PHP大文件上传终极方案】:断点续传核心技术揭秘与实战代码全公开

第一章&#xff1a;PHP大文件上传的挑战与断点续传的意义在现代Web应用中&#xff0c;用户经常需要上传大型文件&#xff0c;如视频、高清图像或备份数据。然而&#xff0c;传统的PHP文件上传机制在处理大文件时面临诸多限制&#xff0c;例如内存溢出、超时中断以及网络不稳定导…

作者头像 李华