【问题标题】:Can't compile simple SDL program with Dev-C++无法使用 Dev-C++ 编译简单的 SDL 程序
【发布时间】:2020-04-11 23:21:16
【问题描述】:

就在您阅读之前,请知道我不是英语,所以希望我不会在这里拼错我的写作。 反正。我试图编译我的第一个 SDL 程序,所以我按照在线教程安装 SDL2 库。我使用的代码(复制自heremin 13:00)是这样的:

#include <iostream>
#include <SDL2/SDL.h>
using namespace std;

int main(void){

    if(SDL_Init(SDL_INIT_VIDEO) < 0) {
        cout << "SDL init failed.\n";
        return 1;
    }

    cout << "SDL init succeeded";
    SDL_Quit();


    return 0;
} 

我得到的错误是这样的

C:\Users\raffaele.ciotola\Desktop\Marco & Lory\Lorenzo\Dev-Cpp\SDL2-2.0.12\x86_64-w64-mingw32\lib\libSDL2main.a(SDL_windows_main.o) In function `main_getcmdline':
71      s:\rs\valve\release\SDL\SDL2-2.0.12-source\src\main\windows\SDL_windows_main.c  undefined reference to `SDL_main'
C:\Users\raffaele.ciotola\Desktop\Marco & Lory\Lorenzo\Dev-Cpp\Programs\SDL_\collect2.exe   [Error] ld returned 1 exit status
25      C:\Users\raffaele.ciotola\Desktop\Marco & Lory\Lorenzo\Dev-Cpp\Programs\SDL_\Makefile.win   recipe for target 'SDL_.exe' failed

我尝试以管理员身份运行我的 Dev-Cpp.exe,因为安装文件夹在桌面上,但这并没有解决问题。

Makefile(不管它是什么,我没有最小的想法)就是这个。如果需要¯_(ツ)_/¯.

# Project: Progetto3
# Makefile created by Dev-C++ 5.11

CPP      = g++.exe
CC       = gcc.exe
WINDRES  = windres.exe
OBJ      = SDL_.o
LINKOBJ  = SDL_.o
LIBS     = -L"C:/Users/raffaele.ciotola/Desktop/Marco & Lory/Lorenzo/Dev-Cpp/MinGW64/lib" -L"C:/Users/raffaele.ciotola/Desktop/Marco & Lory/Lorenzo/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib" -L"C:/Users/raffaele.ciotola/Desktop/Marco & Lory/Lorenzo/Dev-Cpp/SDL2-2.0.12/x86_64-w64-mingw32/lib" -static-libgcc -mwindows -lmingw32 -lSDL2main -lSDL2 -lopengl32 -lglu32
INCS     = -I"C:/Users/raffaele.ciotola/Desktop/Marco & Lory/Lorenzo/Dev-Cpp/MinGW64/include" -I"C:/Users/raffaele.ciotola/Desktop/Marco & Lory/Lorenzo/Dev-Cpp/MinGW64/x86_64-w64-mingw32/include" -I"C:/Users/raffaele.ciotola/Desktop/Marco & Lory/Lorenzo/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include"
CXXINCS  = -I"C:/Users/raffaele.ciotola/Desktop/Marco & Lory/Lorenzo/Dev-Cpp/MinGW64/include" -I"C:/Users/raffaele.ciotola/Desktop/Marco & Lory/Lorenzo/Dev-Cpp/MinGW64/x86_64-w64-mingw32/include" -I"C:/Users/raffaele.ciotola/Desktop/Marco & Lory/Lorenzo/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include" -I"C:/Users/raffaele.ciotola/Desktop/Marco & Lory/Lorenzo/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include/c++" -I"C:/Users/raffaele.ciotola/Desktop/Marco & Lory/Lorenzo/Dev-Cpp/SDL2-2.0.12/x86_64-w64-mingw32/include"
BIN      = SDL_.exe
CXXFLAGS = $(CXXINCS) 
CFLAGS   = $(INCS) 
RM       = rm.exe -f

.PHONY: all all-before all-after clean clean-custom

all: all-before $(BIN) all-after

clean: clean-custom
    ${RM} $(OBJ) $(BIN)

$(BIN): $(OBJ)
    $(CPP) $(LINKOBJ) -o $(BIN) $(LIBS)

SDL_.o: SDL_.cpp
    $(CPP) -c SDL_.cpp -o SDL_.o $(CXXFLAGS)

如果您需要任何其他信息,请询问。谢谢。

【问题讨论】:

  • SDL 曾经要求将main 定义为int main(int , char** )。这可能仍然是一项要求。
  • 显然,是的,这是我的问题,@Fibbles 的方法奏效了

标签: c++ sdl


【解决方案1】:

SDL 自己劫持main 函数以进行一些初始设置。然后它将您编写的任何内容调用为main 函数。因为它正在调用您的 main 函数,所以它希望以特定方式定义它。

试试这个,它应该可以解决您遇到的错误:

int main(int argc, char* args[])
{
    // whatever
    return 0;
}

【讨论】:

  • 这使我的程序正常工作。谢谢你。只是另一个问题......如您所见,我在程序中放置了不同的 cout ,但是,由于我创建了一个 SDL 窗口,因此我看不到我的文本。如何从 Dev-Cpp.exe 应用程序中获取控制台输出?
  • 不幸的是,我从来没有在 Windows 下使用过 SDL,所以我不能说为什么你没有得到任何控制台输出。我建议将其作为一个单独的问题发布。
猜你喜欢
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-19
相关资源
最近更新 更多