[英]Mingw build - depends on DLL not native to windows
我正在使用 MinGW (GCC 4.5.0) 編譯我的庫以導出為共享庫。 我通過使用類似於以下的 MAKE 命令編譯所有源文件來做到這一點:
gcc -shared -c mysource.cpp -o mysource.o
最后:
gcc -shared -lstdc++ -lm -lws2_32 mysource.o -o mylib.dll
當我對我的 output 文件(例如使用http://www.dependencywalker.com/ )進行依賴項遍歷時,我看到有 3 個依賴項:
KERNEL32.dll
MSVCRT.dll
LIBSTDC++-6.DLL
讓我的 DLL 依賴於不隨 windows 一起提供的文件對於我的最終目標來說是次優的。
有沒有辦法設置我的系統,以便最終的 output (DLL)僅取決於KERNEL32和MSVCRT ?
-static
標志可能是您正在尋找的。 (在同一行上同時使用-static
和-shared
對我來說仍然看起來很有趣,但它們並不是相反的。)
如果您使用g++
作為驅動程序而不是gcc
,則可以改用-static-libstdc++
標志。
嗯,這正是你告訴你的-shared
與-lstdc++
做的事情......也許在 -shared之前移動該參數並再次鏈接。 據我所知,應該使用 static 版本的 C++ 標准庫。
注意:我認為對於 C++ 目標而不是使用 gcc,我認為還有一個很好的理由。 可能是因為包含了 C++ 標准庫。 不記得從我的頭頂上。 另外,我不知道 MinGW 在這種情況下是否有所不同。
我相信正確的答案是“不”。 其他回答此問題的人並未嘗試解決您的問題。 我很高興看到我的錯誤之處,但我已經對此進行了詳盡的調查,至少, MINGW
和CYGWIN
環境似乎都需要使用 windows 特定的動態鏈接庫 (dll) 進行分發。
對於 Cygwin64,我使用帶有這些標志的“g++”進行編譯:
FFLAGS = -g -Wunused-variable -static -static-libgcc -static-libstdc++
但是可執行文件仍然需要使用"cygwin1.dll"
進行分發——我非常同意這是次優的,我不明白這個限制。 我在MINGW
中發現了類似的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.