2013-04-27 27 views
7

Kök erişime sahip olmayan bir makinede çalıştırmak istediğim bazı kodlar var. Bu makinede bu kodu çalıştırmak için gereken bazı kütüphaneler bulunmamaktadır.C - Bağımlılıklar dahil olmak üzere

Derlediğimde tüm bağımlılıkları dahil etmenin bir yolu var mı? Sonuçta ortaya çıkan dosyanın oldukça büyük olabileceğini anlıyorum.

cevap

7

Aradığınız şey statik bir derleme. Statik derleme Sahne yürütülebilir kendisine kütüphanelerin tümünü içerir, bu nedenle

Sen ile yapabilirsiniz vb belirli bir sistemde, dağıtım, bağımlılık zincirleri hakkında kadar endişelenmenize gerek yoktur:

gcc -Wl,-Bstatic -llib1 -llib2 file.c 

-Wl, bağlayıcıları aşağıdaki bağlantılardan geçirir, -Bstatik, mümkünse statik bağlantıyı söyler ve sonra lib1, lib2, bağlamak istediğiniz lib'lerdir.

Alternatif deneyin:

gcc -static-libgcc -static file.c 

derleme hala olmayan ayrıcalıklı sistemin mimarisini maç gerekecektir.

ldd a.out 
+0

Teşekkür: Ve sen çalıştırdığınızda, bu "dinamik yürütülebilir değil" göstermelidir düzgün derlenmiş Eğer derleme sistemine (lib.a)

yüklü statik kütüphanelerini olması gerekir. Kontrol ettikten sonra onaylayacak ama bence tam olarak ne olduğumu düşünüyorum! – Hector

+0

Tamam, Şimdi bu garip görünüyor /usr/bin/ld: -lgcc_s bulamıyor Tüm eklediklerim- – Hector

+0

sonra -openssl ile önerdi ne de bu bayrakları ekleyin: -static-libgcc' ve ' -static-libstdC++ '(C++ kullanılıyorsa) –