2011-06-09 19 views
9

我編譯我的庫作爲使用MinGW(GCC 4.5.0)的共享庫導出。我這樣做是通過編譯使用做出類似的命令所有的源文件:Mingw構建 - 依賴於不是原生的windows

gcc -shared -c mysource.cpp -o mysource.o 

然後終於:

gcc -shared -lstdc++ -lm -lws2_32 mysource.o -o mylib.dll 

當我做我的輸出文件的依賴步行(使用http://www.dependencywalker.com/例如)我看到有3依賴性:

KERNEL32.dll 
MSVCRT.dll 
LIBSTDC++-6.DLL 

有我的DLL取決於不Windows附帶的文件是次優我的最終目標。

有沒有一種方法我可以設置我的系統向上,以便在最終輸出(DLL)ONLY取決於KERNEL32MSVCRT

回答

6

-static標誌可能是你正在尋找的。 (它仍然看起來很滑稽給我在同一條線上同時使用-static-shared,但它們不是對立的。)

如果你會使用g++作爲一名車手,而不是gcc,你可以改用-static-libstdc++標誌。

+0

這工作。我使用-shared選項構建,並使用-static-libstdC++鏈接運行時。 – 2011-06-10 13:23:58

1

嗯,這正是你告訴你的鏈接器與-lstdc++ ...可能會移動該參數之前-shared並再次鏈接。據我所知,應該使用C++標準庫的靜態版本。

注意:我認爲還有一個很好的理由,更喜歡g ++的C++目標,而不是使用gcc。可能是關於包含C++標準庫。無法記住它從我的頭頂。另外,我不知道MinGW在這種情況下是否有所不同。