首页 > 解决方案 > Clang 编译器/链接器找不到 x86_64 架构的符号 NSMenuItem

问题描述

我目前正在将 C++/SDL2 应用程序移植到 Mac OS X,并且我想向 Mac OS X 应用程序附带的本机菜单栏(在屏幕顶部)添加项目并对其进行编辑。

但是,我的编译器抱怨在 Cocoa API 的任何地方都无法识别 NSMenuItem 类...

我已经设法将我的 main.cpp 转换为 main.mm 和 #import Cocoa/Cocoa.h 头文件,但是当我声明一个 NSMenuItem 变量(例如下面我的代码片段中的 LoadROMItem 变量)时,我得到一个链接器错误:

架构 x86_64 的未定义符号:“_OBJC_CLASS_$_NSMenuItem”,引用自:main.o 中的 objc-class-ref ld:找不到架构 x86_64 的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v查看调用)

这是代码片段:

    bool RUNNING = true;
    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_Window* _SDLwindow = SDL_CreateWindow("GBemu", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 500, 500, SDL_WINDOW_RESIZABLE);
    SDL_Surface* _screen = SDL_GetWindowSurface(_SDLwindow);
    SDL_SysWMinfo *NativeWindowInfo = new SDL_SysWMinfo;
    SDL_GetWindowWMInfo(_SDLwindow, NativeWindowInfo);

    SDL_Event _event;

#ifdef __APPLE__
    NSMenuItem* LoadRomItem = [[NSMenuItem alloc]initWithTitle:@"Load ROM" action:NULL keyEquivalent:@"s"];
    [NativeWindowInfo->info.cocoa.window.menu addItem:LoadRomItem];
#endif

这可能是由于我忘记导入的东西吗?或者它可能是我忘记设置的编译器和/或链接器设置?

我使用 XCode 作为我选择的 IDE。

标签: c++objective-ccocoasdl-2

解决方案


这是链接器错误,而不是编译器错误。确保你链接到 Cocoa 框架——在 Xcode 中你可以将它添加到你的项目中。


推荐阅读