2013-07-18 10 views
5

私はGLFWの文書から例をコンパイルしようとしています。ライブラリとソースファイルの私はMinGWでGLFWの簡単な例をコンパイルしようとするのに助けが必要です

マイフォルダ構造は以下のとおりです。

C:\ CPP \

glfw3.dll glfw3dll.a libglfw3.a

\含まれます。test.cpp GLFW \

glfw3.h glfw3native.h

#include <GLFW/glfw3.h> 

int main(void) 
{ 
    GLFWwindow* window; 

    /* Initialize the library */ 
    if (!glfwInit()) 
     return -1; 

    /* Create a windowed mode window and its OpenGL context */ 
    window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL); 
    if (!window) 
    { 
     glfwTerminate(); 
     return -1; 
    } 

    /* Make the window's context current */ 
    glfwMakeContextCurrent(window); 

    /* Loop until the user closes the window */ 
    while (!glfwWindowShouldClose(window)) 
    { 
     /* Render here */ 

     /* Swap front and back buffers */ 
     glfwSwapBuffers(window); 

     /* Poll for and process events */ 
     glfwPollEvents(); 
    } 

    glfwTerminate(); 
    return 0; 
} 

私は、このコマンドで

c:\cpp>x86_64-w64-mingw32-g++ -lglfw3 -Iinclude test.cpp -o test 

それをコンパイルしようとしているが、私はこのエラーを取得:

c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lglfw3 collect2.exe: error: ld returned 1 exit status 

-v出力:

Using built-in specs. 
COLLECT_GCC=x86_64-w64-mingw32-g++ 
COLLECT_LTO_WRAPPER=c:/users/username/gcc/bin/../libexec/gcc/x86_64-w64-ming 
w32/4.7.2/lto-wrapper.exe 
Target: x86_64-w64-mingw32 
Configured with: ../gcc-4.7.2-mingw/configure --host=x86_64-w64-mingw32 --build= 
x86_64-unknown-linux-gnu --target=x86_64-w64-mingw32 --prefix=/home/gfortran/gcc 
-home/binary/mingw32/native/x86_64/gcc/4.7.2 --with-sysroot=/home/gfortran/gcc-h 
ome/binary/mingw32/cross/x86_64/gcc/4.7.2 --with-gcc --with-gnu-ld --with-gnu-as 
--with-gmp=/home/gfortran/gcc-home/binary/mingw32/native/x86_64/gmp --with-mpfr 
=/home/gfortran/gcc-home/binary/mingw32/native/x86_64/mpfr --with-mpc=/home/gfor 
tran/gcc-home/binary/mingw32/native/x86_64/mpc --with-cloog=/home/gfortran/gcc-h 
ome/binary/mingw32/native/x86_64/cloog --with-ppl=/home/gfortran/gcc-home/binary 
/mingw32/native/x86_64/ppl --with-host-libstdcxx='-lstdc++ -lsupc++ -lm' --enabl 
e-cloog-backend=ppl --enable-targets=i686-w64-mingw32,x86_64-w64-mingw32 --enabl 
e-lto --enable-languages=c,c++,fortran --enable-libgomp --enable-threads=win32 - 
-enable-static --enable-shared=lto-plugin --enable-plugins --enable-ld=yes --ena 
ble-libquadmath --enable-libquadmath-support --disable-nls --disable-tls --disab 
le-win32-registry 
Thread model: win32 
gcc version 4.7.2 (GCC) 
COLLECT_GCC_OPTIONS='-I' 'include' '-o' 'test.exe' '-v' '-mtune=generic' '-march 
=x86-64' 
c:/users/username/gcc/bin/../libexec/gcc/x86_64-w64-mingw32/4.7.2/cc1plus.e 
xe -quiet -v -I include -iprefix c:\users\username\gcc\bin\../lib/gcc/x86_64 
-w64-mingw32/4.7.2/ -U_REENTRANT test.cpp -quiet -dumpbase test.cpp -mtune=gener 
ic -march=x86-64 -auxbase test -version -o C:\Users\username~1.ADM\AppData\Local\T 
emp\ccfe85gV.s 
GNU C++ (GCC) version 4.7.2 (x86_64-w64-mingw32) 
     compiled by GNU C version 4.7.2, GMP version 5.0.5, MPFR version 3.0.0, 
MPC version 0.9 
warning: GMP header version 5.0.5 differs from library version 5.0.1. 
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 
ignoring duplicate directory "c:/users/username/gcc/lib/gcc/../../lib/gcc/x8 
6_64-w64-mingw32/4.7.2/../../../../include/c++/4.7.2" 
ignoring duplicate directory "c:/users/username/gcc/lib/gcc/../../lib/gcc/x8 
6_64-w64-mingw32/4.7.2/../../../../include/c++/4.7.2/x86_64-w64-mingw32" 
ignoring duplicate directory "c:/users/username/gcc/lib/gcc/../../lib/gcc/x8 
6_64-w64-mingw32/4.7.2/../../../../include/c++/4.7.2/backward" 
ignoring duplicate directory "c:/users/username/gcc/lib/gcc/../../lib/gcc/x8 
6_64-w64-mingw32/4.7.2/include" 
ignoring nonexistent directory "/home/gfortran/gcc-home/binary/mingw32/cross/x86 
_64/gcc/4.7.2/home/gfortran/gcc-home/binary/mingw32/native/x86_64/gcc/4.7.2/lib/ 
gcc/x86_64-w64-mingw32/4.7.2/../../../../include" 
ignoring duplicate directory "c:/users/username/gcc/lib/gcc/../../lib/gcc/x8 
6_64-w64-mingw32/4.7.2/include-fixed" 
ignoring duplicate directory "c:/users/username/gcc/lib/gcc/../../lib/gcc/x8 
6_64-w64-mingw32/4.7.2/../../../../x86_64-w64-mingw32/include" 
ignoring nonexistent directory "/home/gfortran/gcc-home/binary/mingw32/cross/x86 
_64/gcc/4.7.2/mingw/include" 
#include "..." search starts here: 
#include <...> search starts here: 
include 
c:\users\username\gcc\bin\../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../i 
nclude/c++/4.7.2 
c:\users\username\gcc\bin\../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../i 
nclude/c++/4.7.2/x86_64-w64-mingw32 
c:\users\username\gcc\bin\../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../i 
nclude/c++/4.7.2/backward 
c:\users\username\gcc\bin\../lib/gcc/x86_64-w64-mingw32/4.7.2/include 
c:\users\username\gcc\bin\../lib/gcc/x86_64-w64-mingw32/4.7.2/include-fixed 

c:\users\username\gcc\bin\../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x 
86_64-w64-mingw32/include 
End of search list. 
GNU C++ (GCC) version 4.7.2 (x86_64-w64-mingw32) 
     compiled by GNU C version 4.7.2, GMP version 5.0.5, MPFR version 3.0.0, 
MPC version 0.9 
warning: GMP header version 5.0.5 differs from library version 5.0.1. 
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 
Compiler executable checksum: 0b3cd9e378660c38a8a80567400ff92f 
COLLECT_GCC_OPTIONS='-I' 'include' '-o' 'test.exe' '-v' '-mtune=generic' '-march 
=x86-64' 
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x 
86_64-w64-mingw32/bin/as.exe -v -I include -o C:\Users\username~1.ADM\AppData\Loca 
l\Temp\ccQqklHV.o C:\Users\username~1.ADM\AppData\Local\Temp\ccfe85gV.s 
GNU assembler version 2.22.52 (x86_64-w64-mingw32) using BFD version (GNU Binuti 
ls) 2.22.52.20120723 
COMPILER_PATH=c:/users/username/gcc/bin/../libexec/gcc/x86_64-w64-mingw32/4. 
7.2/;c:/users/username/gcc/bin/../libexec/gcc/;c:/users/username/gcc/bin 
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x86_64-w64-mingw32/bin/ 
EQ_LIBRARY_PATH=c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7. 
2/;c:/users/username/gcc/bin/../lib/gcc/;C:/Users/username/gcc/x86_64-w6 
4-mingw32/lib/../lib/;c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw3 
2/4.7.2/../../../../x86_64-w64-mingw32/lib/../lib/;c:/users/username/gcc/bin 
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../lib/;C:/Users/username/gcc/ 
x86_64-w64-mingw32/lib/;c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-ming 
w32/4.7.2/../../../../x86_64-w64-mingw32/lib/;c:/users/username/gcc/bin/../l 
ib/gcc/x86_64-w64-mingw32/4.7.2/../../../ 
COLLECT_GCC_OPTIONS='-I' 'include' '-o' 'test.exe' '-v' '-mtune=generic' '-march 
=x86-64' 
c:/users/username/gcc/bin/../libexec/gcc/x86_64-w64-mingw32/4.7.2/collect2. 
exe --sysroot=/home/gfortran/gcc-home/binary/mingw32/cross/x86_64/gcc/4.7.2 -m i 
386pep -Bdynamic -o test.exe C:/Users/username/gcc/x86_64-w64-mingw32/lib/.. 
/lib/crt2.o C:/Users/username/gcc/x86_64-w64-mingw32/lib/../lib/crtbegin.o - 
Lc:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2 -Lc:/users/ 
username/gcc/bin/../lib/gcc -LC:/Users/username/gcc/x86_64-w64-mingw32/lib 
/../lib -Lc:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../. 
./../../x86_64-w64-mingw32/lib/../lib -Lc:/users/username/gcc/bin/../lib/gcc 
/x86_64-w64-mingw32/4.7.2/../../../../lib -LC:/Users/username/gcc/x86_64-w64 
-mingw32/lib -Lc:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2 
/../../../../x86_64-w64-mingw32/lib -Lc:/users/username/gcc/bin/../lib/gcc/x 
86_64-w64-mingw32/4.7.2/../../.. C:\Users\username~1.ADM\AppData\Local\Temp\ccQqkl 
HV.o -lglfw3 -lstdc++ -lmingw32 -lgcc -lmoldname -lmingwex -lmsvcrt -ladvapi32 - 
lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lmoldname -lmingwex -lmsvcrt C:/Us 
ers/username/gcc/x86_64-w64-mingw32/lib/../lib/crtend.o 
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 
6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin 
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../lib/libglfw3.a when searching f 
or -lglfw3 
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 
6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin 
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../lib/glfw3.dll when searching fo 
r -lglfw3 
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 
6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin 
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../lib\libglfw3.a when searching f 
or -lglfw3 
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 
6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin 
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../libglfw3.a when searching for -lgl 
fw3 
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 
6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin 
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../glfw3.dll when searching for -lglf 
w3 
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 
6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin 
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../..\libglfw3.a when searching for -lgl 
fw3 
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 
6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin 
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../lib/libglfw3.a when searching f 
or -lglfw3 
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 
6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin 
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../lib/glfw3.dll when searching fo 
r -lglfw3 
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 
6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin 
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../libglfw3.a when searching for -lgl 
fw3 
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 
6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin 
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../glfw3.dll when searching for -lglf 
w3 
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 
6_64-w64-mingw32/bin/ld.exe: cannot find -lglfw3 
collect2.exe: error: ld returned 1 exit status 

C:\ CPPを> x86_64-w64-mingw32-g ++ - test.cpp -o testと同じです。\ glfw3.dll

c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 
6_64-w64-mingw32/bin/ld.exe: i386 architecture of input file `.\glfw3.dll' is in 
compatible with i386:x86-64 output 
C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0xe): undefi 
ned reference to `glfwInit' 
C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0x43): undef 
ined reference to `glfwCreateWindow' 
C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0x53): undef 
ined reference to `glfwTerminate' 
C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0x66): undef 
ined reference to `glfwMakeContextCurrent' 
C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0x74): undef 
ined reference to `glfwSwapBuffers' 
C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0x79): undef 
ined reference to `glfwPollEvents' 
C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0x85): undef 
ined reference to `glfwWindowShouldClose' 
C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0x93): undef 
ined reference to `glfwTerminate' 
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 
6_64-w64-mingw32/bin/ld.exe: C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o 
: bad reloc address 0x0 in section `.pdata' 
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8 
6_64-w64-mingw32/bin/ld.exe: final link failed: Invalid operation 
collect2.exe: error: ld returned 1 exit status 

答えて

2

gccとライブラリ検索パスを調べるためには、コマンドラインに表示されるライブラリの順序が重要です。-lglfw3を最後まで移動し、-Lを使用して現在のディレクトリを検索パスに追加してください。

例えば、

g++ -Iinclude test.cpp -o test.exe -L . -lglfw3 

EDIT1:詳細なステータス出力を見てから、あなたが持っているlibglfw3.aはあなたが使用しているのMinGWのgccと互換性がありませんようです。幸いにも、ldリンカは、dllファイルを直接扱うことができます。

g++ -Iinclude test.cpp -o test.exe .\glfw3.dll 

代替あなたが持っているのMinGWのgccを使用してglfw3.dllからインポートライブラリを作成するには、次のようになります。次の作品があれば参照してください。 .defファイルを作成してからdlltoolを呼び出す必要があるため、これはもう少し複雑です。

Edit2:使用しているmingw gccは、64ビットのWindowsコンパイラです。正しいglfw3 64ビットライブラリを使用していて、ではなく、の32ビットバージョンを使用していることを確認してください。 GLFW download section

+0

これはどちらも同じエラーが発生しません。 – caboose0013

+0

'-v'を追加してリンカに渡されていることを確認できますか?あなたの質問にそれを加えてください。 – greatwolf

+0

@ caboose0013明白な問題を除外するために、 'glfw3.dll、glfw3dll.a、libglfw3を確認してください。a'は 'C:\ cpp' akaの下にあります。これは' dir'が確認するものですか?また、現在の作業ディレクトリとして 'C:\ cpp'からコマンドを実行していますか? – greatwolf

0

名前の問題があると思います。 Mingw32コンパイラがライブラリファイルglfw3.dll、glfw3.a、glfw3.hを探しているようです。問題は、ライブラリファイルの名前がlibglfw3.aであることです。今度はそれを見つけるためにglfw3.aに名前を変更する必要があります。それでも動作しない場合は、glfw3.dll.aをglfw3.dll.aに変更する必要があります。

+0

いいえ、それは完全に間違っています。結局のところ、mccはgccのような働きをしています。これは、 '-l'スイッチが' lib'で自動的にプレフィックスを付けることを意味します。 'libglfw3.a'の名前は正しく指定されています。 – greatwolf

関連する問題