当前位置: 首页 > article >正文

为libpng不同架构创建构建目录、编译、安装以及合并库文件的所有步骤。

好的。既然你已经有了 libpng 的源代码,并且当前处在它的目录下,我们可以简化脚本,不再需要下载和解压源代码这一步。以下是修改后的脚本:

```sh
#!/bin/bash

# 当前目录即 libpng 源代码目录
LIBPNG_SRC_DIR=$(pwd)

# 设置工作目录
WORK_DIR=$(pwd)/libpng_build
BUILD_DIR_X86_64="$WORK_DIR/build_x86_64"
BUILD_DIR_ARM64="$WORK_DIR/build_arm64"
BUILD_DIR_UNIVERSAL="$WORK_DIR/build_universal"
INSTALL_DIR_X86_64="$BUILD_DIR_X86_64/install"
INSTALL_DIR_ARM64="$BUILD_DIR_ARM64/install"
UNIVERSAL_LIB_DIR="$BUILD_DIR_UNIVERSAL/lib"
UNIVERSAL_INCLUDE_DIR="$BUILD_DIR_UNIVERSAL/include"

# 创建工作目录
mkdir -p $WORK_DIR

# 创建构建目录
mkdir -p $BUILD_DIR_X86_64
mkdir -p $BUILD_DIR_ARM64
mkdir -p $BUILD_DIR_UNIVERSAL

# 编译 x86_64 版本的 libpng
cd $BUILD_DIR_X86_64
cmake $LIBPNG_SRC_DIR -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR_X86_64 -DCMAKE_OSX_ARCHITECTURES=x86_64
make
make install

# 编译 arm64 版本的 libpng
cd $BUILD_DIR_ARM64
cmake $LIBPNG_SRC_DIR -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR_ARM64 -DCMAKE_OSX_ARCHITECTURES=arm64
make
make install

# 合并库文件到通用库目录
mkdir -p $UNIVERSAL_LIB_DIR
lipo -create -output $UNIVERSAL_LIB_DIR/libpng16.a $INSTALL_DIR_X86_64/lib/libpng16.a $INSTALL_DIR_ARM64/lib/libpng16.a

# 合并头文件
mkdir -p $UNIVERSAL_INCLUDE_DIR
cp -R $INSTALL_DIR_X86_64/include/* $UNIVERSAL_INCLUDE_DIR/

# 验证生成的通用库
echo "验证生成的通用库:"
lipo -info $UNIVERSAL_LIB_DIR/libpng16.a

echo "通用库生成完毕,路径:$BUILD_DIR_UNIVERSAL"

使用脚本进行构建

  1. 将上述代码保存为 build_libpng_universal.sh
  2. 赋予脚本执行权限:
chmod +x build_libpng_universal.sh
  1. 确保你处在 libpng 源代码的目录下,然后执行脚本:
./build_libpng_universal.sh

执行完之后,脚本会在 libpng_build/build_universal 目录下生成包含通用库的 lib 和头文件的 include 目录。在项目中,可以像这样链接你的库和包含文件:

set(LIBPNG_DIR "/absolute_path_to_libpng_build/build_universal")
link_directories(${LIBPNG_DIR}/lib)
include_directories(${LIBPNG_DIR}/include)
target_link_libraries(your_target libpng16)

这个脚本将处理从构建到合并的所有步骤,确保 libpng 的 x86_64 和 arm64 架构版本被正确编译和合并。



http://www.kler.cn/a/294897.html

相关文章:

  • Android CarrierConfig 参数项和正则匹配逻辑
  • 游戏引擎学习第五天
  • shodan7(泷羽sec)
  • 《重学Java设计模式》之 原型模式
  • YOLOv11融合ICCV[2023]动态蛇形卷积Dynamic模块及相关改进思路|YOLO改进最简教程
  • 【C++】 C++游戏设计---五子棋小游戏
  • python基础语法四-数据可视化
  • HTTP与HTTPS在软件测试中的解析
  • 使用modelsim小技巧
  • Mysql数据库表结构迁移PostgreSQL
  • springboot组件使用-mybatis组件使用
  • 《云原生安全攻防》-- K8s攻击案例:高权限Service Account接管集群
  • IPv6归属地查询-IPv6归属地接口-IPv6归属地离线库
  • 【有啥问啥】什么是扩散模型(Diffusion Models)?
  • [论文笔记] LLaVA
  • Effective Java学习笔记--39-41条 注解
  • 【LVI-SAM】激光雷达点云处理特征提取LIO-SAM 之FeatureExtraction实现细节
  • 把Django字典格式的数据库配置转成tortoise-orm的URL格式
  • k8s集群版部署
  • 排序算法-std::sort的使用(待学习第一天)
  • llama.cpp demo
  • 【H2O2|全栈】关于HTML(2)HTML基础(一)
  • 数字证书与HTTPS部署
  • 亚马逊云科技 Gen BI 2024-09-04 上海站QuickSight
  • Ajax 解决回调竞争
  • C# System.Linq提供类似SQL语法的高效查询操作