Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 关于使用mingw32和SDL2生成文件的问题(未定义的SDL_main…再次)_C++_Makefile_Sdl 2 - Fatal编程技术网

C++ 关于使用mingw32和SDL2生成文件的问题(未定义的SDL_main…再次)

C++ 关于使用mingw32和SDL2生成文件的问题(未定义的SDL_main…再次),c++,makefile,sdl-2,C++,Makefile,Sdl 2,很多人都会犯这样的错误,但我没有通过查看其他makefile来解决这个问题。 我将首先解释我的目标和我在做什么 我正在创建一个名为MyLib的库,它使用SDL2和OpenGL 除主函数外,所有对SDL2的引用都存在 这个库也使用makefile和mingw,并返回*.a文件 我创建了一个虚拟的exe应用程序,它包含主函数,并通过调用起始点对象链接到MyLib 当尝试链接虚拟exe时,我得到以下错误 g++-c../。/src/main.cpp../。/src/DummyGame.cpp-Wall

很多人都会犯这样的错误,但我没有通过查看其他makefile来解决这个问题。 我将首先解释我的目标和我在做什么

  • 我正在创建一个名为MyLib的库,它使用SDL2和OpenGL
  • 除主函数外,所有对SDL2的引用都存在
  • 这个库也使用makefile和mingw,并返回*.a文件
  • 我创建了一个虚拟的exe应用程序,它包含主函数,并通过调用起始点对象链接到MyLib
  • 当尝试链接虚拟exe时,我得到以下错误
  • g++-c../。/src/main.cpp../。/src/DummyGame.cpp-Wall-std=c++11 -DMINGW32-DUSE_标准-DUSE_SDL -DUSE_SDL_IMAGE-DUSE_OPENGL-DOPENGL32-I../../src-I../../include-I../../../libs/include-I。。 /../../../MyLib/src-L../../../../MyLib/lib-L../../../../libs/lib/mingw32/lib-lmingw32-lSDL2 main-lSDL2-mwindows-lSDL2_image-lSDL2_ttf-lopengl32-lMyLib g++-Wall-std=c++11-DMINGW32-DUSE_std-DUSE_SDL-DUSE_SDL_IMAGE-DUSE_OPENGL-DOPENGL32-I../。。 /src-I../../include-I../../../../../libs/include-I../../../MyLib/src-L../../../MyLib/lib -L../../../../../libs/lib/mingw32/lib-lmingw32-lSDL2main-lSDL2-mwindows-lSDL2_image-lSDL2_ttf-L opengl32-lMyLib-o Dummy.mingw32.exe ../../../../libs/lib/mingw32/lib/libSDL2main.a(SDL_windows_main.o):在 功能
    console\u main':
    /Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/。/src/main/windows/SDL\u windows\u main.c:140:
    und
    定义了对
    SDL\u main'的引用 collect2.exe:错误:ld返回了1个退出状态 Makefile.mingw:26:目标'Dummy.mingw32.exe'的配方失败 mingw32-make.exe:[Dummy.mingw32.exe]错误1 -- xcopy/Y Dummy.mingw32.exe“../../bin” 未找到文件-Dummy.mingw32.exe 已复制0个文件 Makefile.mingw:34:目标“安装”的配方失败 mingw32-make.exe:[安装]错误4 --

    main.cpp文件是这样的:

    #include "DummyGame.h"
    
    using namespace Dummy;
    
    #ifdef __cplusplus
    extern "C" 
    #endif
    int main(int argc, char *argv[])
    {
        DummyGame *game = new DummyGame("Dummy", 720, 480);
        game->run(); 
    
        return 0;
    }
    
    h包括MyLib头,它将包括SDL2头

    我使用的是文件夹“i686-w64-mingw32”中正确的32位版本的SDL2

    这是我的实际生成文件:

    CP = xcopy /Y
    RM = del /F
    
    TARGET = Dummy.mingw32.exe
    
    PROJDIR = ../..
    BASEDIR = $(PROJDIR)/../..
    SRCDIR = $(PROJDIR)/src
    INSTALLDIR = $(PROJDIR)/bin
    
    INCLUDE = -I$(SRCDIR) -I$(PROJDIR)/include -I$(BASEDIR)/libs/include -I$(BASEDIR)/MyLib/src 
    
    LIBSPATH = -L$(BASEDIR)/MyLib/lib -L$(BASEDIR)/libs/lib/mingw32/lib
    
    LIBSFLAG = -lmingw32 -lSDL2main -lSDL2 -mwindows -lSDL2_image -lSDL2_ttf -lopengl32 -lHikeGDK
    LDFLAGS = $(INCLUDE) $(LIBSPATH) $(LIBSFLAG) 
    CXXFLAGS = -Wall -std=c++11 -DMINGW32 -DUSE_STD -DUSE_SDL -DUSE_SDL_IMAGE -DUSE_OPENGL -DOPENGL32 
    LIBS = $(CXXFLAGS) $(LDFLAGS)
    
    MODULES = $(wildcard $(SRCDIR)/*.cpp)
    OBJS = $(wildcard *.o)
    
    all: $(TARGET)
    
    $(TARGET): $(MODULES)
        $(CXX) -c $(MODULES) $(LIBS)
        $(CXX) $(OBJS) $(LIBS) -o $@
    
    clean:
        $(RM) $(OBJS)
        $(RM) $(TARGET)
    
    install: 
        $(CP) $(TARGET) "$(INSTALLDIR)"
    

    谢谢您的帮助。

    您是否尝试重新订购链接库?我记不起正确的顺序,但这很重要(至少对于gcc系列编译器而言)。要检查的其他事项:是否
    DummyGame.h
    包括
    SDL.h
    ?如果没有,那就是问题所在-它包含SDL_主宏。在最好的情况下,
    main.cpp
    应该直接包含
    SDL.h
    。我确实在链接的libs上尝试了不同的订单,但没有成功。是的,DummyGame.h包含将包含SDL.h的MyLib.h文件。我已经为sanity check准备好了直接在main中包含SDL.h,但没有运气。啊,也许我看到了错误-在第二个g++调用中,您正在将库链接在一起,但是没有*.o对象。但是,我不知道makefile,所以我不知道如何修复它。。。(但可能是
    OBJS=$(通配符*.o)
    在错误的目录中查找-只是猜测…)在那个地方肯定有问题。我会调查一下,如果发现什么我会给你打电话的。谢谢;)