Fab*_*ián 3 c++ opengl sdl visual-studio-2012
我刚刚开始使用SDL学习C++ OpenGL的教程.视频教程中显示的步骤是使用名为Code Blocks的IDE完成的,但我认为它也适用于Visual Studio 2012.
我下载了用于Windows x64的SDL2开发人员(我的Windows 7是64位,但我的Visual Studio 2012是x86版本)
要在Visual Studio 2012中安装SDL2,我将:
之后,我打开IDE,创建了一个新项目,当我编写代码时,自动完成弹出特定的SDL功能,意味着成功......直到我试图运行它.
这是我根据录像带编写的代码:
#include "SDL.h"
int main(int argc, char* args[]){
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Quit();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我单击"开始调试"或"无需调试启动"时,按"是"进行构建后,输出会出现错误.
这是我写的代码的截图,加上输出:

之后,我尝试了教程已经使用的旧版SDL,这是1.2(我覆盖了较新版本的几个文件),但仍然没有很好的结果.
如何修复它以便我可以练习OpenGL + SDL功能?
TLDR:
在项目中使用库时
#include <*.h>)并包含包含它们的目录*.lib,你缺少的东西)和包含它们的库目录*.dll),通常使用与.lib当前或系统目录中相同的名称(VS也有二进制目录,但我从来不需要知道它们究竟是什么)编译代码并添加时#include <SDL.h>,编译器会运行一个可能的目录列表来查找该文件.已经设置了一些默认目录,但是在一个地方你没有乱七八糟的所有库,可以添加更多.例如,在Visual Studio 2012(以及2011和2010)中设置全局C++包含路径.如果您的SDL.h位于include目录的子目录中,则无法找到它 - 例如.只是检查这不应该<SDL/SDL.h>是类似的东西.
使用include路径设置和正确#include的代码可以编译.现在是连接阶段.你有一些代码说我需要这些函数,链接器必须找到这些函数的实际代码并静态链接它们(所有代码都可以在中找到.lib)或者设置程序在运行时链接,动态(在这种情况下,程序需要能够找到.dll,并且我认为在Windows上你需要一个.lib随之而来的文件).
因此除了include目录之外,还需要一个库目录.另外,就像你对编译器说的那样,#include <SDL.h>你需要告诉链接器查找in SDL.h中定义的那些函数的代码SDL.lib(这可能最终在加载时实际上在运行时提供代码SDL.dll).我认为指定库甚至可以通过#pragma调用来完成,但更常见的是将库文件指定为链接器程序的参数.正如@ ScottMcP-MVP所说,追加SDL.lib到Project Properties->Configuration Properties->Linker->Input->Additional Dependencies列表中.如果仍然说unresolved external通常意味着链接器仍然无法找到该文件,那么检查拼写错误并仔细检查目录.最坏的情况是SDL.h和SDL.lib之间不匹配,或者SDL.lib是使用不同的选项或不同的编译器编译的.
您收到的错误是链接器说编译器说我需要一个"外部"函数,SDL_Init以使您的代码工作,但我还没有找到/解决 - 参考 - 我在库的列表中的一个得到了.
就像一个例子/重述所有这些GUI选项最终转到编译器/链接器.例如,完整的编译行可能如下所示:
./compiler -I/path/to/my/includes -L/path/to/my/lib -lmylibrary.lib mycode.cpp -o myexecutable.exe
Run Code Online (Sandbox Code Playgroud)
哪里mycode.cpp包含#include <mylibrary.h>.请注意,此处./compiler作为编译器和链接器运行.该过程可分为:
./compiler -I/path/to/my/includes mycode.cpp -o mycompiledcode.o
./linker -L/path/to/my/lib -lmylibrary.lib mycompiledcode.o -o myexecutable.exe
Run Code Online (Sandbox Code Playgroud)
获得可执行文件后,它需要能够SDL.dll在您运行它时找到它.正如您所做的那样,可执行文件应该搜索Windows系统目录.它还应该搜索其当前目录.在linux上你可以设置一个rpath(不确定在Windows上).如果你继续得到application configuration incorrect并且dll肯定在那里它是时候抓住依赖性walker并看看程序实际上正在尝试加载的名称.最坏的情况是应用程序在所需的版本之前找到不同版本的dll或其他具有相同名称的版本.
祝好运.OpenGL非常有趣!
[ 编辑 ]
您可以使用x32或x64 lib文件,但所有代码必须相同.从x32开始可能更容易,如果你需要快速double计算和更多ram然后改变.OpenGL对x64没有很好的支持,所以它可能不会给你带来太大的影响.
Additional Dependencies是你把刚才 " SDL.lib".然后,该文件需要存在于visual studio的一个库目录中.如果你不再从SDL获得未解析的外部,那么该部分是固定的.
您的_main错误可能与令人恶心的黑客*吐痰*SDL使用有关.#include <SDL.h>放置后直接#undef main(可能想要在#ifdefs中包围以防它改变):
#include <SDL.h> //my include is <SDL2/SDL.h>, as I have both an SDL and SDL2 dir in my include path
#ifdef main
#undef main //remove SDL's main() hook if it exists
#endif
Run Code Online (Sandbox Code Playgroud)
需要注意的重要一点是:通常使用</>包含外部库并"/"在项目中包含标题 - #include <filename>和#include"filename"之间有什么区别?
| 归档时间: |
|
| 查看次数: |
2236 次 |
| 最近记录: |