1

.dll ファイルにリンクしようとしてlibpng16.libいますが、うまくいきません。私はすでにプロジェクトの依存関係libpng16.libに含めていzlib.libます(正しい順序で、最初にlibpng)が、それでもpng_*リンクエラーが発生します。

Googleで検索した他のソリューションでさえ機能しません。

編集:

ログは次のとおりです。

mingw32-g++.exe -Wall  -O2  -std=c++11 -Wall -g    -c C:\Users\Mark\Documents\CodeBlocks\TextureLoader\TextureLoader.cpp -o obj\Release\TextureLoader.o
C:\Users\Mark\Documents\CodeBlocks\TextureLoader\TextureLoader.cpp: In static member function 'static unsigned int TextureLoader::PNG_Texture_Load(const char*)':
C:\Users\Mark\Documents\CodeBlocks\TextureLoader\TextureLoader.cpp:105:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
mingw32-g++.exe -shared  -Wl,--out-implib=bin\Release\libTextureLoader.a -Wl,--dll -LC:\MinGW\include  obj\Release\TextureLoader.o   -o bin\Release\TextureLoader.dll -lOpenGL32 -lGLu32 -s  C:\Users\Mark\Documents\CodeBlocks\TextureLoader\libpng16.lib C:\Users\Mark\Documents\CodeBlocks\TextureLoader\libpng16.lib 
obj\Release\TextureLoader.o: In function `ZN13TextureLoader16PNG_Texture_LoadEPKc':
C:/Users/Mark/Documents/CodeBlocks/TextureLoader/TextureLoader.cpp:27: undefined reference to `png_sig_cmp'
C:/Users/Mark/Documents/CodeBlocks/TextureLoader/TextureLoader.cpp:33: undefined reference to `png_create_read_struct'
C:/Users/Mark/Documents/CodeBlocks/TextureLoader/TextureLoader.cpp:41: undefined reference to `png_create_info_struct'
C:/Users/Mark/Documents/CodeBlocks/TextureLoader/TextureLoader.cpp:50: undefined reference to `png_create_info_struct'
C:/Users/Mark/Documents/CodeBlocks/TextureLoader/TextureLoader.cpp:59: undefined reference to `png_set_longjmp_fn'
C:/Users/Mark/Documents/CodeBlocks/TextureLoader/TextureLoader.cpp:66: undefined reference to `png_init_io'
C:/Users/Mark/Documents/CodeBlocks/TextureLoader/TextureLoader.cpp:68: undefined reference to `png_set_sig_bytes'
C:/Users/Mark/Documents/CodeBlocks/TextureLoader/TextureLoader.cpp:70: undefined reference to `png_read_info'
C:/Users/Mark/Documents/CodeBlocks/TextureLoader/TextureLoader.cpp:77: undefined reference to `png_get_IHDR'
C:/Users/Mark/Documents/CodeBlocks/TextureLoader/TextureLoader.cpp:79: undefined reference to `png_read_update_info'
C:/Users/Mark/Documents/CodeBlocks/TextureLoader/TextureLoader.cpp:81: undefined reference to `png_get_rowbytes'
C:/Users/Mark/Documents/CodeBlocks/TextureLoader/TextureLoader.cpp:109: undefined reference to `png_read_image'
C:/Users/Mark/Documents/CodeBlocks/TextureLoader/TextureLoader.cpp:123: undefined reference to `png_destroy_read_struct'
C:/Users/Mark/Documents/CodeBlocks/TextureLoader/TextureLoader.cpp:100: undefined reference to `png_destroy_read_struct'
4

1 に答える 1

0

リンク中の未定義のシンボルは通常、リンクしようとしているインポート ライブラリに問題があるか、ツールセットが探しているものとインポートが実際に提供するシンボルとの間に不一致があることを示します。

そうは言っても、mingw に付属する gnu ld リンカは msvc.libインポート ライブラリを理解できるはずです。libpng16.dll別の方法として、それをリンカーに渡すことで、 に対して直接リンクを試みることができます。

たとえば、次のコマンドでリンクしてみてください。

g++.exe -shared -Wl,--out-implib=bin\Release\libTextureLoader.a -LC:\MinGW\include obj\Release\TextureLoader.o -o bin\Release\TextureLoader.dll -lOpenGL32 -lGLu32 パス\場所\of\your\libpng16.dll

-LC:\MinGW\include元のリンク コマンドでは、おそらく正しくないことに注意してください。ランタイムおよびその他のさまざまなインポートを直接含むライブラリ パスは、通常、include ディレクトリではなく、mingw の lib ディレクトリのどこかに存在します。たとえば、鉱山は にありG:\Mingw32-4.6.3\i686-w64-mingw32\libます。

于 2013-05-17T03:39:19.010 に答える