c++ - 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。
解决方案
这是链接器错误,而不是编译器错误。确保你链接到 Cocoa 框架——在 Xcode 中你可以将它添加到你的项目中。
推荐阅读
- python - 从嵌套的 bash 调用中捕获 python 输出?
- ruby-on-rails - Rails 6 + Webpacker + Yarn:加载 javascript 库的问题
- php - mPDF - Ln() 是否用于换行?
- nginx - 禁用 HTTP->HTTPS 重定向并仅使用 Nginx 离开我的站点 HTTP?
- jenkins - Jenkins Publish HTML 报告不发布 html 报告
- spring-boot - 如何在 Spring Boot 中使用带有 Bearer Token 和 form-data 的 Rest Template 调用 REST Api
- python-3.x - 如何在python中生成每个日期MM/DD/YY
- wget - 为什么 wget 只得到一个空文件夹?
- ruby-on-rails - 我们可以在 ruby on rails 6 中将一些变量附加到路由路径吗?
- linux - Fio 结果稳步提升 IOPS,出乎我的意料