目录:

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

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

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

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

  1. GCC链接库的一个坑:动态库存在却提示未定义动态库的函数

    背景 在GCC中已经指定链接库,然而编译时却提示动态库函数未定义! 测试出现的错误提示如下: [GMPY@13:48 tmp]$gcc -o test -L. -lmylib test.c /tmp/ ...

  2. 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 链接库. 方案: 查看 ...

  3. (原)关于sdl在部分机器上做视频显示,改变显示窗口大小会崩溃

    今天测试人员反应,之前做的视频绘图显示,会在她机器上,会出现崩溃现象,最后我在她机器上对代码进行跟踪,发现在某种情况,确实会崩溃. 最主要的原因是,视频显示窗口变成非活动窗口的时候,sdl内部会循环消 ...

  4. SDL示例一:实现七段数码管的显示

    [时间:2017-05] [状态:Open] [关键词:sdl2,数字,七段数码管,图形显示,示例代码] 0 引言 本文是针对我的step-into-sdl2/7LedDigit的原理介绍,有兴趣的可 ...

  5. Bootstrap Table踩坑——设置多级表头后只显示第一级表头问题解决办法

    今天设置了Bootstrap Table的复杂表头,设置了多级表头(两行列名),但是只能显示第一级表头(第一行的列名),第二级的表头被第一级的表头覆盖.但是我仿照其他网上的其他设置复杂表头例子都能正常 ...

  6. mingw32环境下链接库找不到问题

    本人在win10下安装了mingw环境,以方面windows下测试gcc编译器构建一些开源组件.但是windows系统下遇到了一些编译问题. 1. 问题现象 一次手写的Makefile遇到了如下编译错 ...

  7. 11.巨坑,注意了,关于显示不正常的问题,localstorage的存储问题

    在存储时,localstorage和sessionstorage只能存储字符串,所以,必须把json转换为字符串再存,JSON.stringify

  8. sqlserver 找不到驱动,显示项目缺少class办法

    maven使用 <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId> ...

  9. ubuntu---记录.动态库默认路径的踩坑

    发现这个问题,还是经过一个报错问题卡了好多天,然后请求好多人的支援,最后个人的疑问:为什么明明指明了路径,生成 .SO 没有问题,在调用.SO 就有问题,报错各种找不到函数或者未定义,然后把缺的 *. ...

随机推荐

  1. 使用httpclient必须知道的参数设置及代码写法、存在的风险

    转发地址:http://jinnianshilongnian.iteye.com/blog/2089792 结论: 如果使用httpclient 3.1并发量比较大的项目,最好升级到httpclien ...

  2. OpenCV Sobel 导数

    #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #i ...

  3. 科研伴我成长——上海交通大学ACM班学生在微软亚洲研究院的幸福实习生活

    每一年,微软亚洲研究院都会迎来一批"特殊的"实习生--他们既不是从五湖四海汇聚而来,也不是在读的硕士和博士.他们相识已久,知道对方的小秘密.小八卦,也相互敬佩.惺惺相惜--他们就是 ...

  4. 3DMAX安装未完成,某些产品无法安装的解决方法

    3DMAX提示安装未完成,某些产品无法安装该怎样解决呢?,一些朋友在win7或者win10系统下安装3DMAX失败提示3DMAX安装未完成,某些产品无法安装,也有时候想重新安装3DMAX的时候会出现本 ...

  5. 20180105关于课题所用的labview的改进随笔

    在原有的工程上1.写入60个不同的数字~顶层,看测量次数是1.2.3.4.5.6.7.8.9的时候文件记到几次的数,一次的话,从接受命令到全部写到文件最短需要等多久.写入固定的数,通过startfla ...

  6. 传统if 从句子——以条件表达式作为if条件

    传统if 从句子——以条件表达式作为 if条件if [ 条件表达式 ]then command command commandelse command commandfi   条件表达式 文件表达式 ...

  7. MyBatis学习总结之一对一映射

    知识点:JavaType和ofType都是用来指定对象类型的,但是JavaType是用来指定pojo中属性的类型,而ofType指定的是映射到list集合属性中pojo的类型. 本次mybatis的练 ...

  8. IDEA如何添加库lib(java)

    1.点击file 2.点击 3.点击 4.点击右面+号 5.找到你的类库添加即可

  9. [BZOJ 1412][ZJOI 2009] 狼和羊的故事

    题目大意 有一个 (n times m) 的网格,每一个格子上是羊.狼.空地中的一种,羊和狼可以走上空地.现要在格子边上建立围栏,求把狼羊分离的最少围栏数. (1 leqslant n, ; m le ...

  10. 01Java代码是怎么运行的

    从虚拟机视角来看,执行 Java 代码首先需要将它编译而成的 class 文件加载到 Java 虚拟机中.加载后的 Java 类会被存放于方法区(Method Area)中.实际运行时,虚拟机会执行方 ...