2012-05-25 18 views
13

im i aşağıdaki komutları kullanın :bina ve paylaşılan kütüphane bağlama g ++ kullanarak bir windows cygwin platformda paylaşılan kütüphane oluşturmak ve daha sonra başka bir cpp dosyası ile bağlamak için çalışıyor

// generate object file 

g++ -g -c -Wall -fPIC beat11.cpp -o beat11.o 

// to generate library from the object file 

g++ -shared -Wl,-soname,libbeat.so.1 -o libbeat.so.1.0.1 beat11.o -lc 

// to link it with another cpp file; -I option to refer to the library header file 

g++ -L. -lbeat -I . -o checkbeat checkbeat.cpp 

bağlama sırasında,

/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../i686-pc-cygwin/bin/ld: 
    cannot find -llibbeat.so.1.0.1 

collect2: ld returned 1 exit status 

kütüphane gayet oluşturulan alır, ama sadece, libbeat.so.1.0.1 bulmak libbeat.so veya libbeat.so.1 değil (ya da gerekiyordu değildir edebilirsiniz: aşağıdaki hata ekinler orada ol?)

diğer sorulardan

bir libbeat.so.1.0.1 bir sembolik oluşturarak önerir, ama bu da işe yaramadı

cevap

13

bağlamak için kütüphane belirtmek için -l<libname> kullanarak, bağlayıcı ilk lib<libname>.a aramadan önce lib<libname>.so arayacaktır.

Sizin durumunuzda, kitaplık dosya adı .so son ekiyle çalışmadığı için çalışmaz. Sen oluşturabilir

simlink

libbeat.so -> libbeat.so.1.0.1 

veya

libbeat.so -> libbeat.so.1 
libbeat.so.1 -> libbeat.so.1.0.1 

da kullanabilirsiniz -l:libbeat.so.1.0.1 (sizin bağlayıcı destekliyorsa, -l parametrenin man ld açıklamasında kontrol edin). Aksi bağlayıcı sembolleri bulamayabilir - Başka bir seçenek bağlanmak kütüphane sembollerini kullanarak nesne/kaynak dosyasının sonra koymak gerektiğini -l

g++ -o checkbeat checkbeat.cpp -I . -L. libbeat.so.1.0.1 

Not olmadan kütüphaneyi belirtmektir.

+0

Aynı problemi yaşadım ve -l: libname.so kullanarak yaptığınız yorumunuz. Bununla birlikte, linker lib-. aynı zamanda benim çalışmam gerektiği anlayışıydı ama en azından cygwin ile durum böyle görünmüyor. Diğer derleyicilerle denemedim. – Devolus

+0

Buradaki cevap bana yardımcı oldu: http://stackoverflow.com/questions/16154130/cygwin-g-linker-doesnt-find-shared-library – solstice333

İlgili konular