关于c ++:在OSX上从源代码构建GIMP 2.10失败了“gimp-debug-tool-2.0”

Building GIMP 2.10 from source on OSX fails on “gimp-debug-tool-2.0”

我曾经试图在OSX上构建Gimp 2.10一周,但现在没有成功。大多数的问题都是不同的依赖关系等等。虽然花了很长时间,所有的问题都可以解决,但现在我觉得我走到了死胡同。我已经到了最后运行"make"的阶段,经过一段时间的构建,它在"gimp-debug-tool-2.0"上出错了。以下是输出日志:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Making all in app-tools
  CCLD     gimp-debug-tool-2.0
Undefined symbols for architecture x86_64:
 "_OBJC_CLASS_$_NSString", referenced from:
      objc-class-ref in libappwidgets.a(gimpcriticaldialog.o)
 "_OBJC_CLASS_$_NSWorkspace", referenced from:
      objc-class-ref in libappwidgets.a(gimpcriticaldialog.o)
 "_objc_autoreleasePoolPop", referenced from:
      _gimp_critical_dialog_response in libappwidgets.a(gimpcriticaldialog.o)
 "_objc_autoreleasePoolPush", referenced from:
      _gimp_critical_dialog_response in libappwidgets.a(gimpcriticaldialog.o)
 "_objc_msgSend", referenced from:
      _gimp_critical_dialog_response in libappwidgets.a(gimpcriticaldialog.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [gimp-debug-tool-2.0] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

我在构建Qt、OpenCV应用程序时也遇到过类似的错误。存在的问题是缺少库,我通过提供到这些库的路径解决了这个问题。但是在构建"gimp-debug-tool-2.0"时可能会缺少什么,这似乎是内部工具。

如果有人有任何类似的经验,或有任何线索/提示,我如何解决这个问题,并能指出我的正确方向,这将是非常感谢。

坦克提前。


根本原因是gimp-debug-tool-2.0是一个新的模块,它与OS X操作系统集成,在应用程序发生故障时提供一个对话框。它引用的nsstring和nsworkspace类是OS X的一部分。因此,您需要根据相应的OS X框架链接来解析符号。

不幸的是,在构建周期开始时运行的自动配置引用了CoreFoundation框架,但这不是nsstring或nsworkspace实际存在的地方。

现在的解决方法是将其作为ldflags环境变量的一部分包括在内:

-framework Foundation -framework AppKit

这将允许构建正确完成,但有点矫揉造作。正确的方法是修复自动配置,以便它首先正确地引用这些框架,但这比我能管理的要复杂得多。


事实证明,尽管使用了那个调试工具,所有的工作都应该正常。我实际上并不需要它,所以我很高兴跳过了建造它。我运行了make with-k标志,它继续出错,幸运的是没有其他错误。在构建和安装之后,它在我的MacBook上运行得很好。

OSX上的GIMP 2.10.1