Code::Blocks w/ MinGW:将libpng静态链接到dll中
Code::Blocks w/ MinGW: statically link libpng into a dll
我正在尝试将libpng16.lib
链接到我的.dll文件,但我无法让它工作。我已经libpng16.lib
和zlib.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
相关文章:
- 如果我想链接静态库并删除未使用的符号.txt我应该如何处理 Cmakelist
- 为什么当我在 C 程序中链接静态库时会"undefined symbol"?
- 强制链接静态库与 cmake 不起作用
- CMake 项目链接静态库
- 使用 CMake 在 Mac 上链接静态 GLFW 和 OpenGL
- DLL 链接静态库 - 未使用函数中未解析的链接器符号
- 如何使用 WAF 链接静态库?
- 无法在 Mac OS X 上链接静态资源库
- MAPI 链接静态库 (LNK2019: 未解析的外部符号)
- 为什么G 不链接静态程序
- 节点本机模块 - 链接静态库
- 在链接链接静态(GSOAP)库的共享库时,为什么会得到一个未定义的符号
- 链接静态和动态库时违反 ODR
- 代码中的MinGW::块不链接静态OpenSSL库
- Emscripten 链接静态库错误:wasm 流式编译失败:导入'env.getTempRet0'
- 如何正确链接静态类
- CMake 链接静态库和 glib 错误
- Eclipse CDT:如何在没有项目清理>>项目重建的情况下重新链接静态库
- 错误:链接静态库时出现";"
- gcc 如何链接静态库