[問題] 如何使用minGW編譯DLL (with def檔)

作者: whatai (多多)   2016-07-12 18:21:03
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
minGW
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)

問題(Question):
目前想將手上的專案(公司內部N個library)
採用minGW來編譯
先前是使用VC6.0來編 但是一個個編太麻煩
目前想跟linux整合 採用makefile或mk來管理
但是目前做下來發現
minGW可以順利編出lib, dll 以及exe
exe也可以執行
但是編譯出來的lib dll卻無法在VC6.0, VS13 上運行
會出現以下錯誤訊息
Error 1 error LNK2019: unresolved external symbol "char * __cdecl
HelloWorld(void)" (?HelloWorld@@YAPADXZ) referenced in function
[email protected]/*
作者: uranusjr (←這人是超級笨蛋)   2016-07-12 19:08:00
這看起來是 C++?如果是的話本來就不能混用, 出錯是正常其實即使是 C 也沒有保證相容性, 只是實務上有機會可以連 VS 各版本之間都不能保證相容了
作者: whatai (多多)   2016-07-12 19:20:00
C++的話 應該可以用extern C 來解決, 另外真正要編譯的code 已經可以各自在linux/windows上編譯, 但想用mingw來編譯, 如此可以省去一大堆的專案精靈設定 以及打開專案才能編譯的功, 並且可以沿用(或小修改)makefile來達成功效或是有大大可以提供提他編譯方式 也是可以的 ^^
作者: Qbsuran (Qbsuran)   2016-07-12 21:38:00
微軟開發者工具, 用cl編譯.o後再用link連結成dll是我會寫成bat來編譯
作者: enthos (影斯作業系統)   2016-07-13 16:43:00
作者: eye5002003 (下一夜)   2016-07-14 21:37:00
用CMake管理VS專案就好啦而且VS專案可以只用命令列來編譯,並非一定要開專案檔
作者: whatai (多多)   2016-07-15 12:52:00
其實我連專案都不想設 XDDDD, 樓上幾位的推文我在研究看看
作者: enonrick (EnonRick)   2016-07-15 16:59:00
錯誤是指找不到mangling 的function,我猜mingw 出來的function 沒有mangling ,用 nm 去找看看到 HelloWorld的function name ,說不定在VS中function import 前加extern "C" 就好了或者兩邊的 call convension 都要指定,mingw 用 g++ 不是 gcc
繼續閱讀

Links booklink

Contact Us: admin [ a t ] ucptt.com