我正在努力解决许多人得到的这个宣布错误,但我没有设法解决它看着别人的makefile . 我将首先解释我的目标和我正在做的事情 .

  • 我正在创建一个名为MyLib的lib,它使用SDL2和OpenGL;

  • 除主要功能外,所有对SDL2的引用都在那里;

  • 这个lib也使用makefile和mingw并返回* .a文件 .

  • 我创建了一个虚拟的exe应用程序,它包含main函数和通过调用Starting point对象链接到MyLib .

  • 当试图链接Dummy exe时,我收到以下错误 .

g -c ../../src/main.cpp ../../src/DummyGame.cpp -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 -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_main'中:/Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x86/../src/main/windows/ SDL_windows_main.c:140:未定义引用到SDL_main'cols2.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:目标'install'的配方失败mingw32-make.exe:[install]错误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;
}

DummyGame.h包含将包含SDL2标头的MyLib标头 .

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

这是我的实际makefile:

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)"

谢谢你的帮助 .