C++ 关于使用mingw32和SDL2生成文件的问题(未定义的SDL_main…再次)
很多人都会犯这样的错误,但我没有通过查看其他makefile来解决这个问题。 我将首先解释我的目标和我在做什么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
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)
在错误的目录中查找-只是猜测…)在那个地方肯定有问题。我会调查一下,如果发现什么我会给你打电话的。谢谢;)