2013-10-14 65 views
1

好吧,假設我已經構建了一些名爲libImmortal.alibUglyFace.so的庫。第一個是~/LakeOfBlood/lib,第二個是安裝槽make install,在/usr/lib。在獎金我做ldconfig如何正確鏈接libs(.so y .a)與cmake

現在在~/LakeOfBlood我想編輯CMakeList.txt。我想補充庫:

project (LOB) 
. 
. 
. 
# (the binary will be built in ~/LakeOfBlood) 
link_directories(${LOB_BINARY_DIR}/lib) 
. 
. 
. 
target_link_libraries(LakeOfBlood UglyFace Immortal) 

,但是當我compil ld無法找到改變Immortal

我還可以鏈接:

target_link_libraries(LakeOfBlood UglyFace Immortal) 

通過

target_link_libraries(LakeOfBlood UglyFace /home/OftheBeast/LakeOfBlood/Immortal.a) 

然後ld作品。

...對接,是有AF * * * * * * 「而是」 ......

當我開始LakeOfBlood

,我得到:

./LakeOfBlood: error while loading shared libraries: libUglyFace.so: cannot open shared object file: No such file or directory

兩個庫AREN我的,他們帶着一個叫做OccultGod的樣本。如果我做ldd OccultGod我:

libUglyFace.so => /home/OfTheBeast/LakeOfBlood/lib/libUglyFace.so (0x0000666)

所以現在,

  1. 我怎麼能到OccultGod說使用/usr/lib/libUglyFace.so,而不是上面的人嗎? (谷自己CMakeList.txt
  2. 我怎麼能解決我的CMakeList.txtlibImmortal.a
  3. 你能向我解釋爲什麼LakeOfBlood看不到/usr/lib/libUglyFace.so。我的意思是/usr/lib是標準路徑嗎?那麼我想每個庫在那裏,會被任何二進制自動找到...

回答

0
  1. 使用路徑,而不是目標名稱:target_link_libraries(OccultGod /usr/lib/libUglyFace.so)
  2. 我沒有得到什麼,這裏的問題,但你不應該」你在/home/OftheBeast資本中做T
  3. 我想,因爲它被rpath'ed成可執行文件。 make install您的項目或target_link_libraries()中不使用目標名稱。