2011-06-09 26 views
9

Kitaplığımı, MinGW (GCC 4.5.0) kullanarak paylaşılan bir kitaplık olarak vermek üzere derledim. Sonra nihayetMingw build - Windows'un yerel olmayan DLL dosyasına göre değişir.

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

Ve: Ben benzer komutlar YAPMAK kullanarak tüm kaynak dosyalarını derleyerek bunu benim çıkış dosyasının bir bağımlılık yürüyüş yaptığınızda

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

(örneğin http://www.dependencywalker.com/ kullanarak), benim DLL olması

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

benim nihai hedef için optimum altında pencereler ile gemi yok dosyalara bağlıdır: orada 3 bağımlılıkları olduğunu görüyoruz.

Ben kurulum Sistemimi kadar can bir yolu var mı ki son çıkış (DLL) SADECEKERNEL32 ve MSVCRT bağlıdır?

cevap

6

-static bayrak, aradığınız şey olabilir. (Hala aynı hat üzerinde -static ve -shared ikisini de kullanmak bana komik görünüyor, ama karşıtlar değildir.)

yerine gcc bir sürücü olarak g++ kullanırsınız, bunun yerine -static-libstdc++ bayrağını kullanabilirsiniz.

+0

Bu çalıştı. -shared seçeneğini kullanarak yapıyorum ve çalışma zamanlarını -static-libstdC++ kullanarak bağlarım. –

1

Eh, belki yine-shared ve bağlantı önce bu parametreyi hareket ... -lstdc++ ile yapmak için bağlayıcı aynısını söyledim. O zaman C++ standart lib'in statik sürümünü kullanmalıyım.

Not: G ++ kullanmak yerine g ++ hedeflerini g ++ için tercih etmenin iyi bir nedeni olduğunu düşünüyorum. Muhtemelen C++ standart lib'in dahil edilmesi ile ilgilidir. Kafamın üstünden hatırlayamıyorum. Ayrıca, MinGW'nin bu durumda farklı olup olmadığını bilmiyorum.

İlgili konular