0

このチュートリアルhttp://www.opengl-tutorial.org/beginners-tutorials/tutorial-1-opening-a-window/を Cygwin でコンパイルしようとしています。次のエラーが表示されます。

$ g++ main.cpp -o main -lm -lgl -lglut -lglew -lglfw -lopengl32 -lglu32 -lglaux
 -lodbc32 -lodbccp32
/usr/lib/gcc/i686-pc-cygwin/4.7.3/../../../libglfw.a(win32_window.o):win32_windo
w.c:(.text+0x11a0): undefined reference to `_imp___iob'
/usr/lib/gcc/i686-pc-cygwin/4.7.3/../../../libglfw.a(win32_window.o):win32_windo
w.c:(.text+0x11c8): undefined reference to `_imp___iob'
/usr/lib/gcc/i686-pc-cygwin/4.7.3/../../../libglfw.a(win32_window.o):win32_windo
w.c:(.text+0x11f0): undefined reference to `_imp___iob'
/usr/lib/gcc/i686-pc-cygwin/4.7.3/../../../libglfw.a(win32_window.o):win32_windo
w.c:(.text+0x1394): undefined reference to `_imp___iob'
/usr/lib/gcc/i686-pc-cygwin/4.7.3/../../../libglfw.a(win32_window.o):win32_windo
w.c:(.text+0x1661): undefined reference to `_imp___iob'
/usr/lib/gcc/i686-pc-cygwin/4.7.3/../../../libglfw.a(win32_window.o):win32_windo
w.c:(.text+0x1696): more undefined references to `_imp___iob' follow
/usr/lib/gcc/i686-pc-cygwin/4.7.3/../../../../i686-pc-cygwin/bin/ld: /usr/lib/gc
c/i686-pc-cygwin/4.7.3/../../../libglfw.a(win32_window.o): bad reloc address 0x0
 in section `.rdata'
collect2: error: ld returned 1 exit status

何が原因でしょうか?

4

1 に答える 1

1

への未解決のシンボルが表示_imp__される場合は、実行時に DLL を使用するようにビルドされたライブラリに対してリンクしようとしていることを意味します。技術的には、問題は MSVC コンパイラが__stdcall関数のインポート スタブをどのようにマングルするかということです。これは、gcc が想定していない (たとえば_impの代わりにimp) アンダースコアをプレフィックスします。

cygwin/MinGW には、少し追加のヘルプが必要です (gcc でコンパイルされたライブラリを使用するか、MSVC DLL ベースのインポート ライブラリを変更する必要があります)。これを説明する記事がここにあります

ただし、ほとんどの場合、単純な解決策は、ライブラリの静的リンク バージョンにリンクすることです。GLEW と glfw の場合、どちらも静的ライブラリが付属しています。の代わりに定義GLEW_STATICしてリンクする必要があります。glfw に関しては、私はあまり詳しくありません。これを行う方法については、glfw のドキュメントを参照してください。glew32sglew

于 2013-09-15T20:32:40.193 に答える