Code::Blocks w/ MinGW:将libpng静态链接到dll中

Code::Blocks w/ MinGW: statically link libpng into a dll

本文关键字:链接 静态 dll libpng Blocks MinGW Code      更新时间:2023-10-16

我正在尝试将libpng16.lib链接到我的.dll文件,但我无法让它工作。我已经libpng16.libzlib.lib包含在项目依赖项中(顺序正确,libpng 优先(,但仍然png_*链接错误。

即使是我在谷歌中搜索的其他解决方案也不起作用。

编辑:

这是日志:

mingw32-g++.exe -Wall  -O2  -std=c++11 -Wall -g    -c C:UsersMarkDocumentsCodeBlocksTextureLoaderTextureLoader.cpp -o objReleaseTextureLoader.o
C:UsersMarkDocumentsCodeBlocksTextureLoaderTextureLoader.cpp: In static member function 'static unsigned int TextureLoader::PNG_Texture_Load(const char*)':
C:UsersMarkDocumentsCodeBlocksTextureLoaderTextureLoader.cpp:105:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
mingw32-g++.exe -shared  -Wl,--out-implib=binReleaselibTextureLoader.a -Wl,--dll -LC:MinGWinclude  objReleaseTextureLoader.o   -o binReleaseTextureLoader.dll -lOpenGL32 -lGLu32 -s  C:UsersMarkDocumentsCodeBlocksTextureLoaderlibpng16.lib C:UsersMarkDocumentsCodeBlocksTextureLoaderlibpng16.lib 
objReleaseTextureLoader.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'

链接期间未定义的符号通常表示您尝试链接的导入库有问题,或者工具集要查找的内容与导入实际提供的符号之间存在分歧。

话虽如此,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 path\location\of\your\libpng16.dll

请注意,原始链接命令中的-LC:MinGWinclude可能不正确。直接包含运行时和各种其他导入的库路径通常位于 mingw 的 lib 目录中,而不是包含在目录中。例如,地雷在G:Mingw32-4.6.3i686-w64-mingw32lib

.