那些年踩過的坑

mingw庫在VS下的使用

LDFLAGS += -static-libgcc -static-libstdc++
LDFLAGS += -lstdc++ -lpthread
LDFLAGS += -Wl,--out-implib,xxx.lib,--output-def,xxx.def
$(CXX) $(CXXFLAGS) $^ -o [email protected] $(LDFLAGS)

通過上述Makefile可以在mingw下生成dll和對應的lib、def文件,且沒有任何mingw庫的依賴;
單獨在VS下鏈接運行也是OK的,但一旦和其它mingw編譯的庫同時使用,鏈接時沒問題,運行時卻會跳出無法定位函數的錯誤提示框;

解決方案:
使用windows命令行下的lib命令,根據def文件重新導出lib文件,重新鏈接,運行正常;

具體導致原因未知,需要研究lib導入庫原理,網上對其原理解釋很少,《程序員的自我修養》動態庫的導入、裝載、運行一章中或可以找到答案;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章