c++ - Code::Blocks w/ MinGW: statically link libpng into a dll -
i'm trying link libpng16.lib .dll file cannot work. included libpng16.lib , zlib.lib project dependencies (in right order, libpng first) still png_* linking errors.
even other's solution search in google won't work.
edit:
here's log:
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 , 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 `png_sig_cmp' c:/users/mark/documents/codeblocks/textureloader/textureloader.cpp:33: undefined reference `png_create_read_struct' c:/users/mark/documents/codeblocks/textureloader/textureloader.cpp:41: undefined reference `png_create_info_struct' c:/users/mark/documents/codeblocks/textureloader/textureloader.cpp:50: undefined reference `png_create_info_struct' c:/users/mark/documents/codeblocks/textureloader/textureloader.cpp:59: undefined reference `png_set_longjmp_fn' c:/users/mark/documents/codeblocks/textureloader/textureloader.cpp:66: undefined reference `png_init_io' c:/users/mark/documents/codeblocks/textureloader/textureloader.cpp:68: undefined reference `png_set_sig_bytes' c:/users/mark/documents/codeblocks/textureloader/textureloader.cpp:70: undefined reference `png_read_info' c:/users/mark/documents/codeblocks/textureloader/textureloader.cpp:77: undefined reference `png_get_ihdr' c:/users/mark/documents/codeblocks/textureloader/textureloader.cpp:79: undefined reference `png_read_update_info' c:/users/mark/documents/codeblocks/textureloader/textureloader.cpp:81: undefined reference `png_get_rowbytes' c:/users/mark/documents/codeblocks/textureloader/textureloader.cpp:109: undefined reference `png_read_image' c:/users/mark/documents/codeblocks/textureloader/textureloader.cpp:123: undefined reference `png_destroy_read_struct' c:/users/mark/documents/codeblocks/textureloader/textureloader.cpp:100: undefined reference `png_destroy_read_struct'
undefined symbols during linking indicates there's wrong import libraries you're trying link against or there's disagreement between toolset looking , symbols import provides.
having said that, gnu ld linker comes mingw should able understand msvc .lib import libraries. alternative can try linking directly against libpng16.dll passing linker.
for example, try linking command:
g++.exe -shared -wl,--out-implib=bin\release\libtextureloader.a -lc:\mingw\include obj\release\textureloader.o -o bin\release\textureloader.dll -lopengl32 -lglu32 path\location\of\your\libpng16.dll
note -lc:\mingw\include in original link command not right. library path directly containing runtime , various other imports reside somewhere in mingw's lib directory rather in include directory. example, mines in g:\mingw32-4.6.3\i686-w64-mingw32\lib.
Comments
Post a Comment