簡體   English   中英

帶MinGW的代碼:: Blocks:將libpng靜態鏈接到dll中

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

我正在嘗試將libpng16.lib鏈接到我的.dll文件,但無法使其正常工作。 我已經將libpng16.libzlib.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'

鏈接期間未定義的符號通常表示您要鏈接的導入庫存在問題,或者在工具集所尋找的內容與導入實際提供的符號之間存在分歧。

話雖如此,但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 \\位置\\您的\\ libpng16.dll

請注意,原始鏈接命令中的-LC:\\MinGW\\include可能不正確。 直接包含運行時和其他各種導入的庫路徑通常位於mingw的lib目錄中,而不是include目錄中。 例如,地雷位於G:\\Mingw32-4.6.3\\i686-w64-mingw32\\lib

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM