关于SDL的一些坑:找不到WinMain,不显示控制台,添加链接库等
目录:
用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!!!
关于SDL的一些坑:找不到WinMain,不显示控制台,添加链接库等的更多相关文章
- GCC链接库的一个坑:动态库存在却提示未定义动态库的函数
背景 在GCC中已经指定链接库,然而编译时却提示动态库函数未定义! 测试出现的错误提示如下: [GMPY@13:48 tmp]$gcc -o test -L. -lmylib test.c /tmp/ ...
- gcc 找不到 boot python 链接库的问题: /usr/bin/ld: cannot find -lboost_python
问题: Ubuntu 14.04,gcc 4.8.4,以默认方式编译 boost 1.67 后,使用 Boost.Python 时,gcc 提示找不到 boost python 链接库. 方案: 查看 ...
- (原)关于sdl在部分机器上做视频显示,改变显示窗口大小会崩溃
今天测试人员反应,之前做的视频绘图显示,会在她机器上,会出现崩溃现象,最后我在她机器上对代码进行跟踪,发现在某种情况,确实会崩溃. 最主要的原因是,视频显示窗口变成非活动窗口的时候,sdl内部会循环消 ...
- SDL示例一:实现七段数码管的显示
[时间:2017-05] [状态:Open] [关键词:sdl2,数字,七段数码管,图形显示,示例代码] 0 引言 本文是针对我的step-into-sdl2/7LedDigit的原理介绍,有兴趣的可 ...
- Bootstrap Table踩坑——设置多级表头后只显示第一级表头问题解决办法
今天设置了Bootstrap Table的复杂表头,设置了多级表头(两行列名),但是只能显示第一级表头(第一行的列名),第二级的表头被第一级的表头覆盖.但是我仿照其他网上的其他设置复杂表头例子都能正常 ...
- mingw32环境下链接库找不到问题
本人在win10下安装了mingw环境,以方面windows下测试gcc编译器构建一些开源组件.但是windows系统下遇到了一些编译问题. 1. 问题现象 一次手写的Makefile遇到了如下编译错 ...
- 11.巨坑,注意了,关于显示不正常的问题,localstorage的存储问题
在存储时,localstorage和sessionstorage只能存储字符串,所以,必须把json转换为字符串再存,JSON.stringify
- sqlserver 找不到驱动,显示项目缺少class办法
maven使用 <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId> ...
- ubuntu---记录.动态库默认路径的踩坑
发现这个问题,还是经过一个报错问题卡了好多天,然后请求好多人的支援,最后个人的疑问:为什么明明指明了路径,生成 .SO 没有问题,在调用.SO 就有问题,报错各种找不到函数或者未定义,然后把缺的 *. ...
随机推荐
- Offer垂青于有准备的人——微软亚洲研究院实习生们的就业分享
编者按:一年一度的"求职大战"又拉开了序幕,如何在求职中掌握主动,更好地展现自己,最后抓住Offer?且听微软亚洲研究院三位实习生慢慢道来,Offer总会垂青于有准备的人. 廖振, ...
- python学习笔记(10)函数(二)
(函数的参数&递归函数) 一.函数的参数 Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处 ...
- deeplearning.ai 神经网络和深度学习 week4 深层神经网络
1. 计算深度神经网络的时候,尽量向量化数据,不要用for循环.唯一用for循环的地方是依次在每一层做计算. 2. 最常用的检查代码是否有错的方法是检查算法中矩阵的维度. 正向传播: 对于单个样本,第 ...
- FPGA浮点数定点数的处理
http://blog.chinaaet.com/justlxy/p/5100053166大佬博客,讲的非常有条理的 1,基础知识 (1)定点数的基础认知: 首先例如一个16位的数表示的定点数的范围是 ...
- Qt5 提示:无法启动此程序,计算机丢失Qt5Widgetsd.dll的解决方法
Qt5工程编译生成可执行的exe文件之后,运行提示无法启动此程序,计算机丢失Qt5Widgetsd.dll… 原因是没有设置好Qt5的环境变量,解决方法如下: 1.打开[环境变量],(不同的系统会有不 ...
- supervised learning|unsupervised learning
监督学习即是supervised learning,原始数据中有每个数据有自己的数据结构同时有标签,用于classify,机器learn的是判定规则,通过已成熟的数据training model达到判 ...
- 你相信吗:空气污染改变了我们的DNA
空气与人类的生存是息息相关的,它直接参与人体的气体代谢.物质代谢和体温调节等过程.世界卫生组织和联合国环境组织发表的一份报告说:"空气污染已成为全世界城市居民生活中一个无法逃避的现实. ...
- 使用js闭包的好处
使用闭包有以下几大好处: a:希望一个变量长期驻扎在内存中. b:避免全局变量的污染.
- 在python中连接mysql数据库,并进行增删改查
数据库在开发过程中是最常见的,基本上在服务端的编程过程中都会使用到,mysql是较常见的一种数据库,这里介绍python如果连接到数据库中,并对数据库进行增删改查. 安装mysql的python扩展 ...
- 以后的IT路还很长(1)
以后的IT路还很长(1) 最近有两位兄弟同事离职了,蛮可惜了,在一个战壕一起一.两年了,人各有志嘛!希望他们发展更好些! 目前的公司是个创业型的公司,公司从08年的50来个人,扩张到今年11年400多 ...