我正在尝试在 OSX 上的 GTK+ 上做一些工作,但遇到了一些麻烦,因为说实话,我对 Objective-C 不太熟悉。我有足够的编程经验,可以很快掌握基本语法,并且可以在文档中查找我需要的内容。但我遇到的问题与链接库并将类暴露给我链接的程序有关。
GTK+ 是一个 C 库,但 OSX 后端包含几个 Objective-C 类。它们不作为公共 API 公开,仅在内部使用;但对于我正在做的事情,我想尝试公开这些类。
作为参考,这里是其中一个类:
https://github.com/GNOME/gtk/blob/gtk-2-24/gdk/quartz/GdkQuartzWindow.h https://github.com/GNOME/gtk/blob/gtk-2-24/gdk/quartz /GdkQuartzWindow.c
我已经更改了构建系统,以便它安装头文件。我有另一个源文件(在 gtk+ 构建系统之外),其功能如下:
GdkQuartzWindow *win = [[GdkQuartzWindow alloc] /* other messages... */ ];
Run Code Online (Sandbox Code Playgroud)
当我尝试编译时出现链接器错误:
Undefined symbols for architecture i386:
".objc_class_name_GdkQuartzWindow", referenced from:
pointer-to-literal-objc-class-name in main-a8d029.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
我不太熟悉 Objective-C 编译器/链接器的工作原理,并且无法理解我如何(或者如果我可以)解决这个问题。
当我运行时,nm libgdk-quartz-2.0.dylib | grep GdkQuartzWindow我看到很多关于这个类的消息:
00057120 t -[GdkQuartzWindow …Run Code Online (Sandbox Code Playgroud)