在OSX上从源码编译GIMP 2.10时,gimp-debug-tool-2.0编译失败
我太懂这种折腾一周好不容易解决完依赖,结果卡在链接阶段的崩溃感了!你遇到的这些Undefined symbols错误,核心原因很明确——链接器没找到OSX原生Cocoa框架里的Objective-C符号,那些_OBJC_CLASS_$_NSString、_NSWorkspace都是Cocoa框架里的东西,而gimp-debug-tool依赖的libappwidgets模块里的gimpcriticaldialog.o用到了这些API,但编译时没把Cocoa框架加进链接环节。
给你几个具体的解决方向,按顺序试试:
重新配置编译参数,明确指定Cocoa支持
先把之前的编译产物清掉(make clean),然后重新运行configure,加上--with-cocoa参数,确保GIMP的配置脚本识别到OSX的Cocoa框架:make clean ./configure --enable-debug --with-cocoa(如果之前你有自定义的configure参数,比如指定依赖路径之类的,记得一起带上)
手动给Makefile补充Cocoa框架链接
如果configure已经检测到Cocoa但还是报错,那大概率是app-tools目录下的Makefile漏了链接参数。找到这个目录里的Makefile,找到编译gimp-debug-tool-2.0的规则,在LDADD或者LIBS变量里加上-framework Cocoa,然后重新执行make。临时强制添加框架链接参数
不想改Makefile的话,可以直接在make命令里补加LDFLAGS参数,强制让链接器包含Cocoa框架:make LDFLAGS="-framework Cocoa"这个方法能快速验证是不是框架缺失的问题,如果能编译通过,再回头去调整configure或者Makefile的配置。
检查环境变量是否正确
有时候系统环境变量里的LDFLAGS没有包含必要的框架路径(虽然OSX默认应该有),可以先export一下再重新配置编译:export LDFLAGS="-framework Cocoa" ./configure make
另外提一句,GIMP 2.10在OSX上其实有Homebrew的官方编译配方,如果你实在折腾不动源码编译,也可以参考brew的编译参数来调整自己的配置——不过既然你选择源码编译,肯定是有特殊需求,先试试上面的方法应该能解决。
内容的提问来源于stack exchange,提问作者Aušrius Peldžius

