为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"
使用脚本进行构建
- 将上述代码保存为
build_libpng_universal.sh
。 - 赋予脚本执行权限:
chmod +x build_libpng_universal.sh
- 确保你处在 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 架构版本被正确编译和合并。