欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于SDL的一些坑:找不到WinMain,不显示控制台,添加链接库等

程序员文章站 2022-06-22 09:34:24
目录: 1. "用CMake构建SDL时报错" 2. "Gcc添加链接库" 3. "Gcc找不到入口(WinMain)" 4. "让SDL启动时不带控制台窗口" 用CMake构建SDL时报错 这个错误信息翻译成人话就是:你妈的,别在根目录里构建项目!快去创建个build目录,在那里构建! 解决方法很 ......

目录:

  1. 用cmake构建sdl时报错

  2. gcc添加链接库

  3. gcc找不到入口(winmain)

  4. 让sdl启动时不带控制台窗口

用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目录,在那里构建!

关于SDL的一些坑:找不到WinMain,不显示控制台,添加链接库等

解决方法很简单,照它说的做。

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

关于SDL的一些坑:找不到WinMain,不显示控制台,添加链接库等

我们切回项目根目录,看看目录里多了什么:

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咋添加链接库吧(动态和静态)

  1. 动态链接库

    这个比较方便,编译时直接带上.dll就行

    gcc source.c sdl2d.dll -o binary
  2. 静态链接库

    考虑到对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找不到程序入口,我找到了两种解决方法:

  1. 解除预定义的替换

    #undef main
  2. 在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!!!