Program başlatılamıyor çünkü libgcc_s_dw2-1.dll eksik


167

Code :: Blocks ile C ++ basit bir program oluşturduk.

Code :: Blocks üzerinden çalıştırırsam doğru çalışır; ancak çalıştırılabilir dosyada çift tıklatarak çalıştırırsam, bu iletiyle bir pencere açılır:

Program başlatılamıyor çünkü libgcc_s_dw2-1.dll bilgisayarınızda eksik.
Bu sorunu gidermek için programı yeniden yüklemeyi deneyin.

Peki sorun nedir? Düzeltmek için ne yapmam gerekiyor?

Yanıtlar:


196

Bunun bir Microsoft Visual Studio kurulumu yerine bir MinGW / gcc derleyici sorunu olduğuna inanıyorum.

libgcc_s_dw2-1.dllDerleyici'nın bin dizininde olmalıdır. Çalışma zamanı bağlantısı için PATH ortam değişkeninize bu dizini ekleyebilir veya derleyici bayraklarınıza "-static-libgcc -static-libstdc ++" ekleyerek sorunu önleyebilirsiniz.

Yürütülebilir dosyayı dağıtmayı planlıyorsanız, ikincisi muhtemelen en mantıklıdır. Yalnızca kendi makinenizde çalıştırmayı planlıyorsanız, PATH ortam değişkenini değiştirmek çekici bir seçenektir (yürütülebilir dosyanın boyutunu tutar).

Güncellenmiş:

Greg Treleaven'in geri bildirimlerine dayanarak (aşağıdaki yorumlara bakın), bağlantı ekliyorum:

[Kodun ekran görüntüsü :: Bloklar "Proje oluşturma seçenekleri"]

[GNU gcc bağlantı seçenekleri]

Sonraki tartışma -static-libgccve -static-libstdc++bağlayıcı seçenekleri içerir .


@XRobot ile aynı sorunu var ve derleyici bayraklarına bir şeyler eklemek için hiçbir yerde bulamadım, bu yüzden diğer seçenekler, sonra Bağlayıcı seçenekleri eklemeyi denedim ve hata mesajı hala oluştu. Yaptığım işte bir sorun mu var?
Greg Treleaven

@Greg Treleaven: Sadece netlik için, Code :: Block ile bir yürütülebilir dosya oluşturuyorsunuz, IDE içinde beklendiği gibi çalışıyor ancak çalıştırmayı denediğinizde "libgcc_s_dw2-1.dll eksik olduğu için başlatılamıyor" hatası veriyor IDE dışında. Derleyicinin bin dizinini kontrol ettiniz ve evet, bu DLL aslında orada. DLL (çalışma zamanı bağlantısı) gerekli değil, ancak bir kitaplık derlenmiş kod çeker statik bir bağlantı yaparak sorunu gidermeye çalışıyorsunuz, ancak çalışmıyor. İki öneri: Temiz bir yapı oluşturun (seçenekleri değiştirmek bir yeniden oluşturma işlemini tetiklemeyebilir) ve PATH değişkenini eklemeyi deneyin.
hardmath

@hardmath: Temiz bir yeniden oluşturma yaptıktan sonra hala çalışmıyor, bu yüzden bunu düzeltmek için diğer yollardan birini kullanmam gerekecek. Yardım için teşekkürler.
Greg Treleaven

@Greg Treleaven: Derleyicinin bin dizinini PATH'nize eklemeyi denemenin nedeni, (işler işe yaradığında) çalıştırılabilir dosyanın standart kitaplıkların (DLL) çalışma zamanı bağlantısı için hala yapıldığını göstermektir. Sorunun olduğunu düşünüyorum ve derleyici bayrakları koymak için (kütüphane kodunun statik bağlantı yapmak istiyorsanız) bulmamız gerekiyor.
hardmath

4
Bu tartışma devam ediyor (ve çözüldü) burada .
David C

37

Eclipse'de proje özellikleri> C / C ++ Build> Ayarlar> MinGW C ++ Linker> Misc altında bulabilirsiniz.

Üstteki "bağlayıcı bayraklarına" eklemeniz gerekir; başka hiçbir yerde. Sonra yeniden inşa et.

Eclipse properties ekran görüntüsü

Bu bağlantıları bağlamanın optimizasyonlarla bile 1,400kb'a kadar patladığını gördüm. Paylaşılan DLL'leri kopyalamaya kıyasla 277kb daha büyük. Herşeyi UPXing'den sonra 388kb daha büyük. Burada çok kaybetmek / kaybetmek. DLL'leri, son kullanıcının başka bir yere kurup kurmadıklarını silmeye karar verebileceği için ekleyin.


1
Yeni oluşturulan her projeye bağlayıcı bayrağı eklemekten kaçınmanın bir yolu var mı?
Roger Ng

Okuyuculara: Lütfen resimde eklenen seçeneklere dikkat edin. Bu çalışıyor. Bu referans olarak yardımcı olur: orfe.princeton.edu/help/article-296
PALEN

10

Code :: Blocks: ayarlara '-static' ekleyin-> derleyici-> Bağlayıcı ayarları-> Diğer bağlayıcı seçenekleri.


1
Bu başlık için "eksik" dll ile ilgili benim için mükemmel çalıştı, çok hızlı ve kolay, bu bir ilk gitmek tavsiye ederim.
Paul Connolly

En iyi çözüm!
iyy0v

6

PC'nizde bu dll bulun ve yürütülebilir dosya aynı dizine kopyalayın.


bu neden görsel stüdyo ile gerçekleşmiyor?
xRobot

1
Ayrıca yapar, ancak diğer dlls ile. Örnekler, msvcrt90.dll eksikse, görsel derlenmiş projeniz başlamaz (iut genellikle yüklü sistem olsa da)
Bruce

6

Bkz ayrıca . Sorunumu çözdü.

Bu arada, kesinlikle compilerbayrak mı? Belki linkerburada daha uygun bir terimdir?


1
Doğru terminolji için +1! Evet, benim gcc link seçeneklerine "link" bunun bir mürekkep oldu (statik kütüphaneler için).
hardmath

5

Kopyalamak "libgcc_s_dw2-1.dll" kopyalamak için make.exe olduğunu. (Msys kullanıyorsanız, bunu \ msys \ bin'e kopyalayın) make.exe yolunun env'de ayarlandığından emin olun. PATH (make.exe bir klasörde "bin" ise, büyük olasılıkla ve msys'iniz varsa, \ msys \ bin) Derleme, rund, hata ayıklama vb.


5

MinGW http sourceforge.net ağacına gidin. Home / MinGW / Base / gcc / Version4 (veya hangi sürümü kullanıyorsa kullanılsın) / gcc-4 (version) altında / gcc-core-4.8.1-4-mingw32-dll.tar.lzma gibi bir dosya bulacaksınız . Ayıklayın ve libgcc_s_dw2-1.dll ve diğer dll's bulabileceğiniz bin klasörüne gidin. İhtiyacınız olanı kopyalayıp bin dizininize yapıştırın.


5

Derleyicim için "g ++" yerine "gcc" kullanarak bunu aşabildim. Bunun çoğu insan için bir seçenek olmadığını biliyorum, ancak bir çözüm seçeneği olarak bahsettiğimi düşündüm :)


4

System32 veya başkalarının dll dosyalarıyla yaptığınız gibi bir şey koyamazsınız, böylece çalıştırmaya çalıştığınız her program makinenizde bu sorun yaşamayacak mı?

Sadece koyacağım yola ihtiyacım var.

Yeni oluşturduğum bir programı her çalıştırdığımda dizine koymak biraz sinir bozucu ...

Düzenleme: Çözümü buldum:

Libgcc_s_dw2-1.dll dosyasını bilgisayarınızda bir yere çıkarın. Bunu, libgcc_s_dw2-1.dll talep eden programın dizinine çıkarmanızı öneririz.

Bu işe yaramazsa, sistem dizininize libgcc_s_dw2-1.dll dosyasını ayıklamanız gerekir. Varsayılan olarak, bu:

  • C: \ Windows \ Sistem (Windows 95/98 / Me)
  • C: \ WINNT \ System32 (Windows NT / 2000)
  • C: \ Windows \ System32 (Windows XP, Vista, 7)

Windows'un 64 bit sürümünü kullanıyorsanız, libgcc_s_dw2-1.dll dosyasını C: \ Windows \ SysWOW64 \

Mevcut dosyaların üzerine yazdığınızdan emin olun (ancak orijinal dosyanın yedek bir kopyasını oluşturun). Bilgisayarını yeniden başlat.

Sorun devam ederse, aşağıdakileri deneyin:

  • Windows Başlat menüsünü açın ve "Çalıştır ..." ı seçin.
  • CMD yazın ve Enter tuşuna basın (veya Windows ME kullanıyorsanız COMMAND yazın).
  • Regsvr32 libgcc_s_dw2-1.dll yazın ve Enter'a basın

12
Lütfen burada cevap olarak yorum göndermeyin. Stack Overflow bu şekilde çalışmaz. Ayrıca "siz" yerine "u" ve "çünkü" yerine "cos" kullanarak fazla ilerlemezsiniz. Sohbet konuşmasına burada özellikle izin verilmiyor.
meagar

4

Ayarlar >> Derleyici ve Hata Ayıklayıcı'ya gidin, ardından Bağlayıcı Ayarları sekmesini tıklayın ve "Diğer bağlayıcı seçenekleri" düzenleme kontrolünü yapıştırın: "-static-libgcc -static-libstdc ++", bunun için derleyici bayrağı seçeneği yoktur Code :: Blocks için Derleyici Bayrakları seçeneklerinde bu sorunu çözmenin yolu budur, buraya da bir çözüm aramaya geldim ve "-static-libgcc -static-libstdc ++" hakkında yazı yazan kişi doğru fikri verdi ve Ben geri kalanı kazara anladım ama işe yaradı, dosya şimdi Code :: Blocks dışından tıklanabilir, doğrudan masaüstünden çalışır.


3

Bu dll yolu PATH ortam değişkenine ekleyin.


bu neden görsel stüdyo ile gerçekleşmiyor?
xRobot

Muhtemelen bu dll yolu VisualStudio Araçlar -> Seçenekler-> Projeler ve Çözümler -> VC ++ Dizinler -> Yürütülebilir Dosyalar listelenir çünkü. Visual Studio, burada ve dll yollarını ararken PATH ortam değişkeninde görünüyor.
Bojan Komazec

2

Dahil -static-libgcc , derleme satırında sorunu çözer

g++ my.cpp -o my.exe -static-libgcc

Göre: @hardmath

Örneğin, MSYS2 kullanıyorsanız profilinizde [.profile] bir takma ad da oluşturabilirsiniz

alias g++="g++ -static-libgcc"

Şimdi GCC komutunuz da gidiyor ;-)

Terminalinizi yeniden başlatmayı unutmayın


1

Diğer bağlayıcı seçeneklerine "-static" eklemek bu sorunu çözer. Bunu başka bir sistemde test ettikten sonra aynı sorunu yaşıyordum, ancak kendi başıma değil.

DLL'i yürütülebilir dosyayla aynı klasöre kopyalamak, statik olarak bağlama fikrini bozduğu için başka bir not değildir.

Başka bir seçenek, bu sorunu çözen MinGW'nin TDM sürümünü kullanmaktır.

Güncelleme düzenleme: bu herkes için sorunu çözmeyebilir. Son zamanlarda bunun için keşfettiğim bir başka neden, başka biri tarafından derlenmiş bir kitaplık kullandığınızda, benim durumumda düzgün bir şekilde derlenmiş ve bu yüzden var olmayan bir DLL gerekli olan bir DLL gerekli olan SFML oldu kullanın. Ben bir cüce yapı kullanın, bu başka bir kullandı, bu yüzden herhangi bir yerde DLL yoktu ve tabii ki, statik bir yapı olduğu gibi istemiyordu. Çözüm, kütüphanenin başka bir yapısını bulmak veya kendiniz oluşturmak olabilir.


0

Bir hata ayıklama ortamında projemin yayın sürümünü yürütmeye çalışırken aynı hatayı aldım. Benim sorunum için çözüm açıktır: hata ayıklama sembolleri ile yürütülebilir kullanın.


0

CodeBlocks'ta Ayarlar ... Derleyici ... 'ye gidebilir ve 1) mavi kutudaki iki öğeyi veya 2) yeşil kutudaki bir öğeyi seçebilirsiniz

codeblocks derleyici ayarları


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.