没有Xcode的macosx上的C++ SDL

Kev*_*lan 5 c++ macos sdl g++

系统:黑色Macbook运行Mac OS X 10.5.5(Leopard)

我想只使用g ++编译一个SDL hello-world应用程序.Xcode适用于macintosh,但我想要跨平台兼容性,所以我不会使用任何coaca框架(没有菜单,没有按钮等).此外,将Xcode项目移植到其他操作系统并不是很有趣.我下载并将SDL安装到/ Library/Frameworks中.

最大的问题是:makefile中的内容(假设源代码中只有一个helloWorld.cpp文件).如果可能的话,我想避免修改此处找到的Helloworld文件.

Cra*_*enz 5

我花了一点时间自己解决这个问题,只有我已经在使用SDL并且正在从Lion转换为C++.它不仅仅是makefile这里的问题,它可能也是你的源文件......

下载SDL- 版本 .tar.gz

提取并在提示符下运行

./configure --prefix=/home/user/SDL && make && make install
Run Code Online (Sandbox Code Playgroud)

假设所有内容都已构建,您现在可以使用sdl-config通过执行以下命令来构建源代码:

g++ Main.cpp -o Main `/home/user/SDL/sdl-config --cflags --libs` \
    -framework OpenGL -framework Cocoa
Run Code Online (Sandbox Code Playgroud)

这是一样的

g++ Main.cpp -o Main -I/home/user/SDL/include \
    -L/home/user/SDL/lib -lSDLmain -lSDL -framework OpenGL -framework Cocoa
Run Code Online (Sandbox Code Playgroud)

现在关键是你正在使用C++ ...对于SDL宏来正确地替换你的main,你需要阻止C++编译器破坏你的主函数调用.要做到这一点,请声明您的主要内容如下:

extern "C" int main(int argc, char ** argv)
{
}
Run Code Online (Sandbox Code Playgroud)

如果你不包含extern"C"内容,C++将更改主函数的名称,SDL将无法自动找到它.如果你不使用int main(int argc,char**argv)函数签名,C++会抱怨类型不匹配......所以你必须逐字逐句.(如果使用GCC,则排除extern"C"部分)

Chenz