当我使用-larmadillo
编写程序时,我得到一个可执行程序,需要它的两个版本:
$ ldd ./a.out | grep armadillo
$ libarmadillo.so.7 => /usr/lib/x86_64-linux-gnu/libarmadillo.so.7 (0x00007fd5e29a0000)
$ libarmadillo.so.4 => not found
有人能指出我正确的方向吗?这对我没有任何意义!
背景:我最初通过sudo apt-get install libarmadillo-dev
安装了libarmadillo,然后我意识到我需要使用特定参数(启用64位字)来构建它,所以我通过sudo apt-get remove libarmadillo-dev
卸载它然后下载了最新版本,配置和make / make安装它。据推测,我的系统上只有一个版本的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 :(得分:0)
我想我已经弄清楚了,但结果并不是特别令人安慰。
我重新安装了mlpack
libarmadillo
,它依赖于libarmadillo.so.4
,然后重建,libarmadillo
的要求消失了。
我认为发生的过程是我:
libmlpack
libarmadillo
配置了旧版本libarmadillo
,因此已卸载旧make install
并安装了新版本。mlpack
libarmadillo
的可执行文件,它需要旧的libarmadillo
,但它也指向新的make install
重建mlpack
后ldd
,我的问题就消失了。令我感到惊讶的是,libarmadillo.so.4
的详细输出没有说明为什么它正在寻找libmlpack
的任何理由(即ldd
存在依赖关系在旧图书馆上) - tsconfig.json
能够做到这一点吗?
答案 1 :(得分:-1)
有时linux会创建一个动态库的许多符号链接。我不知道为什么,但无论如何都没有不便之处。所以,你可以像这样创建一个新的符号链接:ln -s path_to_my_so_lib / my_lib.so /usr/lib/x86_64-linux-gnu/libarmadillo.so.4