2016-04-05 34 views
0

Güncel projeme bağlanması gereken bir librdma.a'ya sahibim. Ben librdma.a üzerinde nm çalıştırdığınızda, bu ne alıyorum: - bu işlevi anlamınaDış kütüphaneyi projeye bağlama hala tanımlanmamış referans verir

0000000000000000 T set_attribute 

kodunda mevcuttur. Bu yaratır

noinst_LTLIBRARIES=  libsrc.la 

libsrc_la_SOURCES=  One.cpp \ 
         Two.cpp \ 

libsrc_la_CPPFLAGS = -I$(top_srcdir)/inc -I$(rdma_dir)/include 

libsrc_la_LIBADD =  -L$(rdma_dir)/lib -lrdma 

-:

Şimdi bu Makefile.am benim şimdiki projeye bu .bir dosyayı bağlamak ve kullanma bunun için bir .a dosyasını oluşturmaya çalıştığınızda teknik olarak, kullanmaya çalıştığım işlev olan set_attribute() tanımına sahip bir libsrc.a dosyası. Ancak bu arşiv dosyasında bir nm çalıştırdığımda, tanımsız bir başvuru alıyorum. Ben çalıştığınızda tam proje yapmak Ayrıca

    U _Z8set_attributePP5attrlPcS2_ 

, sırayla bu libsrc.a dosyası kullanır, hiç böyle bir hata alıyorum: - Eğer karıştırma gibi

../libfinal/.libs/libfinal.so: undefined reference to `set_attribute()' 
+0

'U _Z8set_attrPP5attrlPcS2_' - set_attribute içermiyor, ancak 'set_attr 'neyin neyi tanımlandığını ve gerçekten ne aradığını kontrol edin – oklas

+0

Benim hatam, bu yalnızca işlevin adını değiştirmedeki hatamdı. Yayın düzenlendi. –

cevap

1

görünüyor C++ kitaplığı olan bir C kitaplığı ve C kitaplığı için üstbilgiler extern C bloğuna sarılmaz. Bu nedenle, ilk kütüphanede set_attribute, un_gold adı verilen ve kütüphanede referans olarak, _Z8set_attrPP5attrlPcS2_ için karışık bir isim elde edersiniz.