2016-04-07 35 views
0

Windows'ta bir GLFW örnek kodunu derlemeye çalışıyorum. Komutu yazmam gerekirse: Komut İstemi'nin içine doğru düzgün bir şekilde derler. Ancak bir makefile kullanmaya çalışıyorum ve bunu yaptığımda aşağıdaki çıktıyı elde ediyorum.Tanımsız başvuru 'WinMain @ 16' minGW32-make hatası

g++ -g -Wall -Ideps/include/ -c main.cpp 
g++ -Ldeps/lib/ -lglfw3_win32 -lopengl32 -lgdi32 -o main.o 
c:/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../libmingw32.a(main.o):(.text.startup+0xa7): undefined reference to `[email protected]' 
collect2.exe: error: ld returned 1 exit status 
Makefile_WIN32:8: recipe for target 'test.exe' failed 
mingw32-make: *** [test.exe] Error 1 

kullanıyorum makefile

PROG = test.exe 
CC = g++ 
CPPFLAGS = -g -Wall -Ideps/include/ 
LDFLAGS = -Ldeps/lib/ -lglfw3_win32 -lopengl32 -lgdi32 
OBJS = main.o 

$(PROG) : $(OBJS) 
    $(CC) $(LDFLAGS) -o $(OBJS) 

main.o : 
    $(CC) $(CPPFLAGS) -c main.cpp 

Ve hiçbir fikrim yok bu yüzden komutu ile hatırlatıyorum

mingw32-make -f Makefile_WIN32 

Makefile nispeten yeni olduğum şey Sorun şu ki, herhangi bir yardım büyük ölçüde takdir edilecektir. Tek tahminim, kaynak kodu değil, g++ komutunu kullanarak derler ve aynı zamanda benzer bir makefile kullanarak benim macumda (dolayısıyla standart olmayan makefile adı) derler.

+0

Sen den ++ g önlemek için – OMGtechy

+0

kullanın -c bir 'WinMain' işlevini tanımlamak gerekir bağlayıcıyı çalıştırmaya çalışıyor. –

cevap

0

Neden bağlantı oluştururken -o $(OBJS)? Bu -o $(PROG) $(OBJS) olmalıdır. Kullanmak yerine, main.o dosyanızı geçersiz kılmaya çalışıyorsunuz ...

Düzenleme: Ayrıca, yapmadan oluştururken aynı komutları kullanmıyorsunuz,kullandığınız makefile kullanırken -lglfw3 kullanın.

Düzenleme 2 (görünüm yorum): Bazen bağlama hedefi sonra kütüphaneler bayrağını koymak gereklidir, bu verir:

$(CC)-o $(OBJS) $(LDFLAGS) 
+0

Bilmiyorum, sadece onu işe almaya çalışan şeyleri değiştiriyordum. Bununla birlikte, önerdiğiniz gibi değiştirdiğimde, yeni hatalar, "glfwInit" ve benzeri gibi tanımlanmamış referanslar alıyorum. Bu bir bağlayıcı hatası mı? Make kullanırken GLFW kütüphanesi dosyasını bulamadığı, ancak tek bir komutta yer almanın neden iyi olduğu hakkında bir fikriniz var mı? –

+0

@Kieran Crayn Kullanmadan oluştururken aynı komutları kullanmıyorsunuz, '-lglfw3_win32' kullandığınız makefile kullanırken' -lglfw3' kullanıyorsunuz. – jdarthenay

+0

GLFW kütüphanesinin iki örneği var, libglfw3.a ve libglfw3_win32.a çünkü sorun kütüphane dosyasında olup olmadığını merak ediyordum. Komut satırında g ++ ile doğrudan bina ya * .a ile çalışır, ama ne senin makefile –