2016-08-17 48 views
0

兩個版本,當我做我的程序與-larmadillo,我得到它想要的這兩個版本的可執行文件:當我有一個共享庫,我的可執行文件正在尋找它的

$ ldd ./a.out | grep armadillo 
$ libarmadillo.so.7 => /usr/lib/x86_64-linux-gnu/libarmadillo.so.7 (0x00007fd5e29a0000) 
$ libarmadillo.so.4 => not found 

任何人都可以點我正確的方向?這對我沒有任何意義!

背景:我最初安裝libarmadillo通過sudo apt-get install libarmadillo-dev,然後我意識到我需要一個特定的參數(支持64個字)來構建它,所以我通過sudo apt-get remove libarmadillo-dev卸載它,然後下載最新的版本,配置和品牌/使安裝它。據推測,我的系統上只有一個版本的libarmadillo - 我在平常的地方沒有看到任何舊圖書館。

感謝

編輯:

我的Makefile:

CC= g++ 
CFLAGS= -Lcontrib/armadillo-7.400.1 -L/usr/include -Lcontrib/mlpack-2.0.1/build/lib -fpermissive -std=c++11 -O0 -g -Wall 
LDFLAGS= -lmlpack -larmadillo 

LDD的詳細輸出有趣的是,我認爲?

$ ldd -v ./a.out | grep armadillo 
$ libarmadillo.so.7 => /usr/lib/x86_64-linux-gnu/libarmadillo.so.7 (0x00007fd5e29a0000) 
$ libarmadillo.so.4 => not found 
$ /usr/lib/x86_64-linux-gnu/libarmadillo.so.7: 

後者部分(其列出依賴性爲libarmadillo.so.7)是:

/usr/lib/x86_64-linux-gnu/libarmadillo.so.7: 
    ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2 
    libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6 

有一個在詳細輸出,無「缺失」 libarmadillo.so.4提及其中我覺得很奇怪。

+0

'a.out'是如何構建的?你的makefile和/或配置文件中有什麼? – wasthishelpful

+0

使用g ++編譯對象:'CFLAGS = -Lcontrib/armadillo-7.400.1 -L/usr/include -fpermissive -std = C++ 11 -O0 -g -Wall'和'LFLAGS = -larmadillo'。我已將ldd的詳細輸出附加到問題中... – ricky116

回答

-1

有時linux會創建一個動態庫的許多符號鏈接。我不知道爲什麼,但無論如何,因爲沒有不方便。所以,你可以像這樣創建一個新的符號鏈接:ln -s path_to_my_so_lib/my_lib.so /usr/lib/x86_64-linux-gnu/libarmadillo.so.4

0

我想我已經知道了,但結果並不特別令人欣慰。

我重新安裝了mlpack,它依賴於libarmadillo,然後重建,並且libarmadillo.so.4的需求消失了。

,我想到的事情發生的過程是我:

  • 安裝舊版本的libarmadillo
  • 安裝libmlpack與舊版本的配置
  • 意識到我需要的libarmadillo較新的版本,所以卸載舊libarmadillo和安裝了一個新的。
  • 重建mlpack使用cmake /讓但沒有make install
  • 使我的可執行
  • 現在有它指向mlpack這就需要老libarmadillo可執行文件,但它也指出,新libarmadillo

一旦我make install重建mlpack,我的問題就消失了。我很驚訝ldd的詳細輸出沒有標記任何理由,因爲爲什麼它正在尋找libarmadillo.so.4(也就是說,從libmlpack對舊圖書館有依賴關係) - ldd應該能夠做到這一點嗎?

相關問題