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

目录:

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

祖安.jpg

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

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

  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!!!

posted @ 2020-03-16 17:03  拉了个灯灯灯灯灯  阅读(1233)  评论(0编辑  收藏  举报