2016-04-01 38 views
0

Libmyname.so yerine _myname.so adlı bir paylaşılan kütüphanem var (çünkü Python arabiriminde). C++ kodunu bu lib'a karşı bağlamak istiyorum.ld kütüphane arama yolu

g++ -o _myother.so myother.o _myname.so ... -shared 

Ancak _myname.so bir diğer dizinde ise, ben yolunu koymak zorunda ve çalışma anında,: Ben geçerli dizinde koyup kullanarak bağlamak eğer iyi çalışır Kütüphane, standart konumlar yerine aynı yola bakılacaktır (LD_LIBRARY_PATH vb.).

ld için bir arama yolu belirtebildiğim bir yol var mı? (Kütüphanem libmyname.so isminde ise -L gibi), böylece çalışma zamanında _myname.so standart konumlarda aranıyor mu?

cevap

1

GNU Binutils'ın 2.18 sürümünde, bir kitaplığın tam adıyla belirtilmesine olanak veren ld'a bir özellik eklenmiştir. Geçerli ld adam sayfasından

: Orijinal soru için

 
    -l namespec 
    --library=namespec 
     Add the archive or object file specified by namespec to the list of files to link. 
     This option may be used any number of times. If namespec is of the form :filename, 
     ld will search the library path for a file called filename, otherwise it will 
     search the library path for a file called libnamespec.a. 

, namespec ait :filename form şöyle kullanılır:

g++ -o _myother.so myother.o -L../myname/ -l:_myname.so -shared 
  • seçenek -L../myname/, yolunu ekler Kütüphane arama yoluna, ../myname/. Bu yol, bağlantı zamanında _myname.so konumunu içermelidir.
  • -l:_myname.so seçeneği ld öğesinin tam adını, _myname.so tam adını içeren bir kitaplık bulmasını bildirir. Arama yaparken lib öneki ve .so son eki, _myname.so'a eklenmez.

Çalışma zamanında, paylaşılan konumlar _myname.so standart konumlarda aranır.

+0

Teşekkürler, bu tam olarak aradığım şey. Maalesef şimdilik 2.17 ile sıkışmış durumdayım. –