M1(ARM)架构MacBook编译Jabcode失败求助
解决M1 Mac编译Jabcode Reader/Writer的链接错误问题
问题根源
Jabcode自带的libpng16.a、libtiff.a、libz.a是针对非arm64架构编译的,M1的arm64系统无法识别这些库文件格式,导致链接时被忽略,进而出现符号未定义错误。
解决步骤
1. 安装arm64兼容的依赖库
用Homebrew安装原生arm64版本的libpng、libtiff和zlib:
brew install libpng libtiff zlib
2. 修改Reader/Writer目录下的Makefile
找到Reader或Writer文件夹中的Makefile,做两处修改:
- 编译头文件路径:在
CFLAGS后添加Homebrew的头文件路径(确保编译器能找到依赖的头文件):CFLAGS += -I/opt/homebrew/include - 链接参数:删除指向Jabcode自带库的
-L../jabcode/lib,同时将-lpng16改为-lpng(Homebrew安装的libpng库名为libpng.a),如果需要手动指定库路径,添加-L/opt/homebrew/lib。修改后的链接命令示例:gcc jabwriter.o -L../jabcode/build -ljabcode -L/opt/homebrew/lib -ltiff -lpng -lz -lm -O2 -std=c11 -o bin/jabcodeWriter
3. 清理旧编译产物,重新编译
- 先清理Jabcode主目录的旧产物:
cd path/to/jabcode make clean && make - 再进入Reader或Writer目录清理并编译:
cd path/to/jabcode/Reader # 或Writer目录 make clean && make
补充:关于x86_64架构编译
如果需要编译x86_64版本,需通过Rosetta打开终端,安装x86版本的Homebrew(路径为/usr/local),再安装对应架构的依赖库,然后在Makefile的CFLAGS和LDFLAGS中添加-arch x86_64,确保所有编译步骤都基于x86_64架构。
内容的提问来源于stack exchange,提问作者winkeltreu
相关产品推荐
相关产品推荐

