c++ - _main 未在 Mac OS X 10.11 上用 c++ 定义

标签 c++ macos linker program-entry-point allegro

我目前正在使用 allegro 5.0 和 c++ 编写一个 c++ 游戏。我最终会让它在 mac、linux、windows 以及可能的 android 和 iPhone 上运行。目前它在 linux 上编译和运行(在最新的 arch linux 上测试),但是在 mac 上有一个小问题:

使用苹果提供的 g++,它提示链接错误,_main 未定义。不过我查了查,我的文件里面肯定定义了main。它一定是无论如何,因为它在 linux 上编译和运行,但我无法弄清楚。

我在谷歌上搜索了很多天和很多术语(太多无法列出),但没有发现与 mac 和 main 未定义有任何关系。可能有什么我想念的吗?我需要在 Mac 上做一些特别的事情吗?最后要注意的一件事是,当我链接 allegro_main.a 时,它会链接,但随后会崩溃。在 linux 上不需要与这个库链接。我正在通过 macports 使用 allegro5。还有一点需要注意的是,mac上编译用的sh脚本是comp_mac.sh,linux下就是comp.sh。请注意,您可能需要修改 sh 脚本以在您的环境中编译。到目前为止,这些仅在我的环境 (macports) 上进行了测试。

我的代码可以在这里找到:http://github.com/2mb-solutions/horseshoes/

感谢所有我能得到的帮助。

-迈克尔。

最佳答案

出现“_main” undefined symbol 错误是因为您没有链接 allegro_main addon .

作为the Allegro 5 manual specifies , 在 C 和 C++ 项目中,包含 main() 函数的文件必须包含核心头文件 allegro5/allegro.h。此外,您必须链接到 allegro_main 插件。

使用 pkg-config 可能是最简单的:

pkg-config --cflags --libs allegro-5 allegro_ttf-5 allegro_audio-5 allegro_acodec-5 allegro_font-5 allegro_main-5

您可以将该命令放在反引号 (`) 中,以将 pkg-config 的输出包含在您的构建命令中。

关于c++ - _main 未在 Mac OS X 10.11 上用 c++ 定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33304295/

相关文章:

c++ - 为什么在两个不同的 cpp 文件中定义同名的类时没有链接器错误?

c++ - 将 std::atomic 与 futex 系统调用一起使用

macos - 应用程序总是请求访问钥匙串(keychain)的权限

macos - 如何终止/重置捆绑 XPC 助手?

c++ - 由于忘记了源文件,在链接我自己的静态库时检测未解析的符号

dll - 不一致的dll链接

c++ - QTreeView - 如何判断拖放事件是重新排序还是 parent 之间的移动?

linux - Python/C++ 扩展。导入时,出现 undefined symbol 错误

c++ - 如何在C++上解码字符串

security - 获取钥匙串(keychain)项的属性