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

看板C_and_CPP (C/C++)作者 (多多)時間9年前 (2016/07/12 18:21), 9年前編輯推噓3(3017)
留言20則, 6人參與, 最新討論串1/1
開發平台(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 _wWinMain@16 E:\work\dev\MINGW_Test\MINGW_Test\MINGW_Test.obj Error 2 error LNK1120: 1 unresolved externals E:\work\dev\MINGW_Test\Debug\MINGW_Test.exe 想請教各位大大是我的作法有問題嗎? 相關程式碼可以請大大參考以下連結 https://drive.google.com/open?id=0B-Slp35hVwQfZy1XRWxOeEpBb28 MINGW_Test 為vs13專案 windows_mingw 為mingw編譯所需的檔案以及相關makefile 請各位大大不吝指教 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.251.110.174 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1468318869.A.A9E.html

07/12 19:08, , 1F
這看起來是 C++?如果是的話本來就不能混用, 出錯是正常
07/12 19:08, 1F

07/12 19:08, , 2F
其實即使是 C 也沒有保證相容性, 只是實務上有機會可以
07/12 19:08, 2F

07/12 19:08, , 3F
連 VS 各版本之間都不能保證相容了
07/12 19:08, 3F

07/12 19:20, , 4F
C++的話 應該可以用extern C 來解決, 另外真正要編譯的
07/12 19:20, 4F

07/12 19:21, , 5F
code 已經可以各自在linux/windows上編譯, 但想用mingw
07/12 19:21, 5F

07/12 19:21, , 6F
來編譯, 如此可以省去一大堆的專案精靈設定 以及打開專案
07/12 19:21, 6F

07/12 19:22, , 7F
才能編譯的功, 並且可以沿用(或小修改)makefile來達成功效
07/12 19:22, 7F

07/12 19:23, , 8F
或是有大大可以提供提他編譯方式 也是可以的 ^^
07/12 19:23, 8F
※ 編輯: whatai (60.251.110.174), 07/12/2016 19:24:39

07/12 21:38, , 9F
微軟開發者工具, 用cl編譯.o後再用link連結成dll
07/12 21:38, 9F

07/12 21:40, , 10F
是我會寫成bat來編譯
07/12 21:40, 10F

07/14 21:37, , 12F
用CMake管理VS專案就好啦
07/14 21:37, 12F

07/14 21:58, , 13F
而且VS專案可以只用命令列來編譯,並非一定要開專案檔
07/14 21:58, 13F

07/15 12:52, , 14F
其實我連專案都不想設 XDDDD, 樓上幾位的推文我在研究看看
07/15 12:52, 14F

07/15 16:59, , 15F
錯誤是指找不到mangling 的function,我猜mingw 出來的
07/15 16:59, 15F

07/15 16:59, , 16F
function 沒有mangling ,用 nm 去找看看到 HelloWorld
07/15 16:59, 16F

07/15 17:00, , 17F
的function name ,說不定在VS中function import 前加
07/15 17:00, 17F

07/15 17:00, , 18F
extern "C" 就好了
07/15 17:00, 18F

07/15 17:15, , 19F
或者兩邊的 call convension 都要指定,mingw 用 g++ 不
07/15 17:15, 19F

07/15 17:16, , 20F
是 gcc
07/15 17:16, 20F
文章代碼(AID): #1NXCILgU (C_and_CPP)
文章代碼(AID): #1NXCILgU (C_and_CPP)