2016-04-01 64 views
0

我有一個名爲_myname.so而不是libmyname.so的共享庫(因爲它是Python接口的)。 我想鏈接C++代碼對這個庫。 它工作正常,如果我把它放在當前目錄中,並使用其鏈接:非標準庫名稱的ld庫搜索路徑

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

但是,如果_myname.so是在其他目錄下,我必須把路徑,並在運行時,庫將被查看到相同的路徑而不是標準位置(LD_LIBRARY_PATH等)。

有沒有一種方法可以指定一個搜索路徑到ld(就像-L如果我的庫被命名爲libmyname.so),所以在運行時_myname.so在標準位置搜索?

回答

1

在GNU Binutils的2.18版本中,ld增加了一項功能,允許使用其確切名稱指定一個庫。

從目前ld手冊頁:

 
    -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. 

對於原來的問題,:filename形式的namespec這樣使用:

g++ -o _myother.so myother.o -L../myname/ -l:_myname.so -shared 
  • 選項,-L../myname/,增加了路徑,../myname/)到庫搜索路徑。此路徑應包含鏈接時的位置_myname.so
  • -l:_myname.so選項告訴ld搜索確切名稱爲_myname.so的庫。 lib前綴和.so後綴在搜索時未添加到_myname.so

在運行時,在標準位置搜索共享庫_myname.so

+0

謝謝,這正是我一直在尋找的。不幸的是,我現在堅持2.17。 –