当前位置: 移动技术网 > IT编程>开发语言>C/C++ > 关于SDL的一些坑:找不到WinMain,不显示控制台,添加链接库等

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

2020年03月17日  | 移动技术网IT编程  | 我要评论

甘孜州政府网,末世战皇,豹王让我滚一滚

目录:

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网