不确定如何导出Objective-C类。体系结构i386的未定义符号

中提琴

我正在尝试在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... */ ];

当我尝试编译时,出现链接器错误:

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)

我对Objective-C编译器/链接器的工作方式并不十分熟悉,并且对理解如何(或如果可以)无法解决这一问题感到很不熟悉。

当我运行时,nm libgdk-quartz-2.0.dylib | grep GdkQuartzWindow我在此类上看到很多消息:

00057120 t -[GdkQuartzWindow beginManualMove]
000575c0 t -[GdkQuartzWindow beginManualResize]
00056c50 t -[GdkQuartzWindow canBecomeKeyWindow]
... (many more) ...
000b2030 s .objc_class_name_GdkQuartzWindow

在该列表的底部,您看到链接器抱怨的东西不存在。但是,如果我使用nm -g而不是,nm则什么也不会显示,因此某些内容无法正确导出。

对于普通的C符号,构建过程将构建一个别名文件,其中包括

苹果的文档给我的印象是,当我的目标是i386(当前是它)时,这应该不是问题。他们说:

在32位OS X项目中,这些可见性控件仅适用于代码的C或C ++子集。它们不适用于Objective-C类和方法。Objective-C类和消息名称是由Objective-C运行时而不是链接程序绑定的,因此可见性的概念不适用于它们。没有机制可以向动态库的客户端隐藏动态库中定义的Objective-C类或方法。

但是,我收到一条错误消息,说我有未定义的符号,因此我的错误似乎与此矛盾。如果我更改此行以便分配一个NSWindow,则一切正常。因此它可以正确导入AppKit内容。似乎在尝试公开类及其方法时做错了。

有人可以指出我正确的方向吗?

卡尔·维泽

作为一种临时的解决方法,您可以使用NSClassFromString将类名作为参数传递的调用来替换对代码中类符号的引用例如:

GdkQuartzWindow *win = [[NSClassFromString(@"GdkQuartzWindow") alloc] /* other messages... */ ];

但是,这具有长期可维护性问题,因为这取决于保持不变的类的名称。我怀疑对于当前的编译器,Apple文档可能已过时或错误。也许检查一下,以gdk / quartz / Makefile.in替换的值是否$(GDK_HIDDEN_VISIBILITY_CFLAGS)确实是平台上的空字符串,如果不是,更改该值可能是满足您需求的更可行的长期解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

不确定如何导出Objective-C类。体系结构i386的未定义符号

来自分类Dev

如何在C中修复“体系结构x86_64的未定义符号”?

来自分类Dev

如何修复C ++链接器错误:体系结构的未定义符号?

来自分类Dev

体系结构i386的未定义符号:“ _ CMTimeMake”,引用自:

来自分类Dev

体系结构i386的未定义符号:“ _ utf8_nextCharSafeBody”,引用自:

来自分类Dev

Xcode 6-用于解析框架的体系结构i386的未定义符号

来自分类Dev

体系结构i386 iOS的未定义符号

来自分类Dev

AFNetworking体系结构i386的未定义符号:“ _ OBJC_CLASS _ $ _ AFHTTPSessionManager”

来自分类Dev

Cordova + XCTest导致“体系结构i386的未定义符号”

来自分类Dev

体系结构i386(RevMob)的未定义符号

来自分类Dev

与“体系结构i386的未定义符号”有关的问题

来自分类Dev

体系结构i386的未定义符号:“ _ sqlite3_open”,引用自:

来自分类Dev

具有EncryptedCoreData的体系结构i386的未定义符号

来自分类Dev

AFNetworking“体系结构i386的未定义符号”错误

来自分类Dev

Cocos2dx:体系结构i386的未定义符号

来自分类Dev

AFNetworking体系结构i386的未定义符号:“ _ OBJC_CLASS _ $ _ AFHTTPSessionManager”

来自分类Dev

具有EncryptedCoreData的体系结构i386的未定义符号

来自分类Dev

体系结构i386的未定义符号:Xcode中的错误

来自分类Dev

体系结构i386的未定义符号:“ _ OBJC_CLASS _ $ _ TLFApplicationHelper”

来自分类Dev

iOS Simulator构建-体系结构i386的未定义符号

来自分类Dev

体系结构i386外部Framework XCode的未定义符号

来自分类Dev

OS X-在C中使用内联汇编时体系结构i386的未定义符号

来自分类Dev

使用xcode使用C创建静态库,错误:“体系结构i386的未定义符号”!

来自分类Dev

OS X-在C中使用内联汇编时体系结构i386的未定义符号

来自分类Dev

如何从Debian安装中删除所有i386体系结构软件包?

来自分类Dev

如何修复“x86_64 体系结构的未定义符号:“_get_driver_instance””链接器错误

来自分类Dev

将Google Analytics(分析)更新为3.0.1之后,用于i386体系结构的Xcode 5未定义符号

来自分类Dev

体系结构i386的未定义符号:“ _ OBJC_CLASS _ $ _ FBSBJSON”,引用自:FacebookController.o中的objc-class-ref

来自分类Dev

C ++功能模板,体系结构的未定义符号

Related 相关文章

  1. 1

    不确定如何导出Objective-C类。体系结构i386的未定义符号

  2. 2

    如何在C中修复“体系结构x86_64的未定义符号”?

  3. 3

    如何修复C ++链接器错误:体系结构的未定义符号?

  4. 4

    体系结构i386的未定义符号:“ _ CMTimeMake”,引用自:

  5. 5

    体系结构i386的未定义符号:“ _ utf8_nextCharSafeBody”,引用自:

  6. 6

    Xcode 6-用于解析框架的体系结构i386的未定义符号

  7. 7

    体系结构i386 iOS的未定义符号

  8. 8

    AFNetworking体系结构i386的未定义符号:“ _ OBJC_CLASS _ $ _ AFHTTPSessionManager”

  9. 9

    Cordova + XCTest导致“体系结构i386的未定义符号”

  10. 10

    体系结构i386(RevMob)的未定义符号

  11. 11

    与“体系结构i386的未定义符号”有关的问题

  12. 12

    体系结构i386的未定义符号:“ _ sqlite3_open”,引用自:

  13. 13

    具有EncryptedCoreData的体系结构i386的未定义符号

  14. 14

    AFNetworking“体系结构i386的未定义符号”错误

  15. 15

    Cocos2dx:体系结构i386的未定义符号

  16. 16

    AFNetworking体系结构i386的未定义符号:“ _ OBJC_CLASS _ $ _ AFHTTPSessionManager”

  17. 17

    具有EncryptedCoreData的体系结构i386的未定义符号

  18. 18

    体系结构i386的未定义符号:Xcode中的错误

  19. 19

    体系结构i386的未定义符号:“ _ OBJC_CLASS _ $ _ TLFApplicationHelper”

  20. 20

    iOS Simulator构建-体系结构i386的未定义符号

  21. 21

    体系结构i386外部Framework XCode的未定义符号

  22. 22

    OS X-在C中使用内联汇编时体系结构i386的未定义符号

  23. 23

    使用xcode使用C创建静态库,错误:“体系结构i386的未定义符号”!

  24. 24

    OS X-在C中使用内联汇编时体系结构i386的未定义符号

  25. 25

    如何从Debian安装中删除所有i386体系结构软件包?

  26. 26

    如何修复“x86_64 体系结构的未定义符号:“_get_driver_instance””链接器错误

  27. 27

    将Google Analytics(分析)更新为3.0.1之后,用于i386体系结构的Xcode 5未定义符号

  28. 28

    体系结构i386的未定义符号:“ _ OBJC_CLASS _ $ _ FBSBJSON”,引用自:FacebookController.o中的objc-class-ref

  29. 29

    C ++功能模板,体系结构的未定义符号

热门标签

归档