关于SDL的一些坑:找不到WinMain,不显示控制台,添加链接库等
程序员文章站
2022-03-25 17:51:14
目录: 1. "用CMake构建SDL时报错" 2. "Gcc添加链接库" 3. "Gcc找不到入口(WinMain)" 4. "让SDL启动时不带控制台窗口" 用CMake构建SDL时报错 这个错误信息翻译成人话就是:你妈的,别在根目录里构建项目!快去创建个build目录,在那里构建! 解决方法很 ......
目录:
用cmake构建sdl时报错
root@ubuntu:~/sdl# cmake .. cmake error at cmakelists.txt:2 (message): prevented in-tree built. please create a build directory outside of the sdl source code and call cmake from there
这个错误信息翻译成人话就是:你妈的,别在根目录里构建项目!快去创建个build目录,在那里构建!
解决方法很简单,照它说的做。
root@ubuntu:~/sdl# mkdir build root@ubuntu:~/sdl# cd build root@ubuntu:~/sdl/build# cmake .. cmake error at cmakelists.txt:2 (message): prevented in-tree built. please create a build directory outside of the sdl source code and call cmake from there
我们切回项目根目录,看看目录里多了什么:
root@ubuntu:~/sdl# ls # 啊啊啊,文件太多了,只写多出来的吧 cmakefiles cmakecache.txt
多出来的一个目录和txt,就是我们第一次在根目录构建时创建的cache,删掉之后才能在其他位置构建
root@ubuntu:~/sdl# rm -rf cmakefiles root@ubuntu:~/sdl# rm cmakecache.txt root@ubuntu:~/sdl# cd build root@ubuntu:~/sdl/build# cmake .. -- the c compiler identification is gnu 5.4.0 -- the cxx compiler identification is gnu 5.4.0 ...
成功!
gcc添加链接库
草,突然想起linux没装图形界面,下面都是在windows下配置的,其实在linux下也一样(使用gcc编译器)。
笔记本太烂,就没装ide,下面就介绍一下gcc咋添加链接库吧(动态和静态)
-
动态链接库
这个比较方便,编译时直接带上.dll就行
gcc source.c sdl2d.dll -o binary
-
静态链接库
考虑到对linux读者的兼容性,这里只介绍一种方法:编译时规定静态库位置
gcc -l静态库位置 -lsdl2maind -lsdl2d
这里要注意一些问题,sdl2maind要写在sdl2d前面,-l是小写的l,不是大写的i
gcc找不到入口(winmain)
undefined reference to `winmain'
这个问题就比较奇特了,在sdl的sdl_main.h中,有这么一行代码:
#define main sdl_main
它把main替换成了sdl_main,导致gcc找不到程序入口,我找到了两种解决方法:
-
解除预定义的替换
#undef main
-
在gcc中规定入口点
gcc source.c sdl2d.dll -nostartfile -e sdl_main
第二种方法先让gcc不使用标准的启动文件(main),然后规定入口函数为sdl_main
第二种方法运行结束后程序貌似不会被销毁...
让sdl启动时不带控制台窗口
这东西挺烦的,好像只有windows下有这个问题,使用ide的同学可以直接在项目设置中关闭。
用微软家编译器的可以在代码中插入一行:
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"maincrtstartup\"" )
这是我在别人博客里看到的,因为我没装vc,也不知道能不能用
用gcc编译器的同学就要麻烦一点了,需要在编译时写成这样:
gcc -wl,subsystem,windows source.c sdl2d.dll -nostartfile -e sdl_main
注意:-wl,后面的是小写的l,不是大写的i!!!