当前位置:   article > 正文

使用 SDL 过程中遇到的两个问题: 找不到main函数 和 链接错误_sdl2_sdlmain_library-notfound

sdl2_sdlmain_library-notfound
最近刷知乎,看到有人在写光栅渲染器,膜拜不已。自己也打算学习学习,看看能不能做出来这么一个。趁着最近两天工作不忙,上班时间看了一下。
"写光栅渲染器" 这件事通俗的说,就是自己实现一个类似 OpenGL 或者  Direct3D 的渲染管线。即 自己 写代码 ,渲染 三维空间里的 点、线、三角形 等图元 到 一个 二维图像里, 这个过程不借助 OpenGL 和 Direct3D 的 API ,而是纯自己实现。这东西的难点当然在前半部分 ,即如何 把 三维空间的图像映射到 二维空间上。但是第一步,至少要做到 ,能够有这样一个 二维空间,自己能够随意的操作里面 像素的值,并显示到屏幕上。
为了达到这第一步, 有许多的方案可以选择。 1. 利用 html5 的  canvas 标签,用  javascript 代码 ,能够比较方便的操作 每个像素的值;2. 使用 windows api ,控制 控制台的颜色,以这个 控制台 当作 渲染的 最终目标; 3.用 windows api 自己构建一个 DIB 图像 ,能够随意操作里面的 像素值,最后 blit 到 windows 窗口上; 4. 就是现在要说的 SDL. SDL 构建 一个 Surface ,然后  Blit 到窗口上(和上一个有点像).
在这几种办法里, h5+js 用起来 感觉不那么 舒服 ; 绘制在控制台上又有点另类而且 用途不大;如果 依赖 win32 api 就没办法在公司和 家里 之间 协同学习(公司只有 mac电脑).所以最终选择了 SDL 的办法 。

最开始使用的是 SDL2 的版本,用  xcode 熟悉了一下 ,感觉  api 设计的非常 清晰明了。在了解了 如何 修改 Surface 上每个像素的颜色值后,我认为我了解的已经够了 ,可以向光栅渲染器的方向前进了。但是回到家里 ,使用windows 电脑打算下载一个 SDL 的 windows 版本时,竟然发现 SDL 的官方网站打不开了。。。无奈之下,只好找到 电脑里面 另一个 使用到了 SDL-1.2.15 的工程里面的 SDL-1.2.15 版本来用。
结果 SDL 1 的 版本 整合 到自己的工程里,就遇到了 几个坑 。

首先是 总是提示你找不到 入口函数 . 新建个  console 工程,写好  int main(int argc,char* argv[])  之后,死活 告诉你没有入口 。最后原因是因为 SDL 的头文件里 #define main SDL_main ,做了这样的 宏定义后,main函数当然就找不到了。  解决的办法是 在  工程/属性/链接器/高级 里面,把 入口点  修改为  SDL_main 这样才能 正常跑 起来。这下算长了见识,我确实是头一次知道  编译的时候是可以 自定义 入口函数的。

其次是 明明有 SDL.lib SDLmain.lib ,链接时也能找到,但是就是 告诉你  里面的函数 比如 SDL_Init() 链接错误。 最后发现是 SDL 库编译好的版本里,有 32位的 lib dll 和 64位的  lib 和  dll, 如果报这样的问题, 直接换成另一套 就能找到了。

上面遇到的两个问题,都是 在使用 SDL 1 这个库的时候遇到的 。使用 SDL2 库的时候,实在  mac 电脑上, 直接 在 Build Phases 里 加上  SDL2.framework ,然后就没有遇到任何问题直接就能用,也遇到 没有 找不到  入口函数的问题 。

好记性不如烂笔头,在此记录一下 经验和教训。








声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/303556
推荐阅读
相关标签
  

闽ICP备14008679号