簡體   English   中英

Mingw build - 取決於 DLL 不是 windows 原生的

[英]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)取決於KERNEL32MSVCRT

-static標志可能是您正在尋找的。 (在同一行上同時使用-static-shared對我來說仍然看起來很有趣,但它們並不是相反的。)

如果您使用g++作為驅動程序而不是gcc ,則可以改用-static-libstdc++標志。

嗯,這正是你告訴你的-shared-lstdc++做的事情......也許在 -shared之前移動該參數並再次鏈接。 據我所知,應該使用 static 版本的 C++ 標准庫。

注意:我認為對於 C++ 目標而不是使用 gcc,我認為還有一個很好的理由。 可能是因為包含了 C++ 標准庫。 不記得從我的頭頂上。 另外,我不知道 MinGW 在這種情況下是否有所不同。

我相信正確的答案是“不”。 其他回答此問題的人並未嘗試解決您的問題。 我很高興看到我的錯誤之處,但我已經對此進行了詳盡的調查,至少, MINGWCYGWIN環境似乎都需要使用 windows 特定的動態鏈接庫 (dll) 進行分發。

對於 Cygwin64,我使用帶有這些標志的“g++”進行編譯:

FFLAGS = -g -Wunused-variable -static -static-libgcc -static-libstdc++

但是可執行文件仍然需要使用"cygwin1.dll"進行分發——我非常同意這是次優的,我不明白這個限制。 我在MINGW中發現了類似的問題。

暫無
暫無

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

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