2010-12-23 114 views
15

我在Ubuntu上使用g ++编译器运行eclipse,并试图运行使用xerces的示例程序。加载共享库时出错

构建产生的任何错误然而,当我试图运行程序,我会收到此错误:在我所包括在Eclipse的一个库的目录/opt/lib

error while loading shared libraries: libxerces-c-3.1.so: cannot open shared object file: No such file or directory

libxerces-c-3.1.so是。当我检查文件夹时,文件在那里。当我执行echo $LD_LIBRARY_PATH时,/opt/lib也被列出。

问题出在哪里?谢谢。

一种ldd libxerces-c-3.1.so命令产生以下输出:

linux-vdso.so.1 => (0x00007fffeafff000) 
libnsl.so.1 => /lib/libnsl.so.1 (0x00007fa3d2b83000) 
libpthread.so.0 => /lib/libpthread.so.0 (0x00007fa3d2966000) 
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fa3d265f000) 
libm.so.6 => /lib/libm.so.6 (0x00007fa3d23dc000) 
libc.so.6 => /lib/libc.so.6 (0x00007fa3d2059000) 
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007fa3d1e42000) 
/lib64/ld-linux-x86-64.so.2 (0x00007fa3d337d000) 
+0

[加载共享库时出现Linux错误:无法打开共享对象文件:没有此文件或目录]可能的重复(http://stackoverflow.com/questions/480764/linux-error-while-loading-shared-libraries -cannot-open-shared-object-file-no-s) – 2016-03-01 18:31:57

回答

4

我将所有库文件从/ opt/lib复制到/ usr/lib中,并且该程序现在可以工作。感谢您的回应。

3

运行ldd libxerces-c-3.1.so并检查输出,看看是否所有的依赖关系可以找到。

+0

我用ldd命令的结果编辑了主题。我对Linux相当陌生,所以我不太确定输出是什么意思。我如何知道我是否拥有所有共享库?那些用箭头列出的那些? – user459811 2010-12-23 00:53:42

22

尝试以root身份运行ldconfig以查看它是否解决了问题。

+4

有人可以解释为什么这个工程? – 2016-03-21 18:29:46

1

尝试安装库libxerces-c3.1 as。使用下面提到的命令来安装库。

sudo apt-get install libxerces-c3.1 

这对我来说就像一个魅力。

1

有很多方法可以做到这一点,大部分已经在这里提到。但是你想要避免意外地将你的库文件复制到系统中。这很容易完成,因为人们对于为图书馆制作原创独特的名字几乎没有想象力。

因此,有几件事情要考虑:

  • 你需要这些文件到您的系统的永久组成部分?
  • 你只需要安装测试和频繁更新?
  • 您是否只需要它们运行特定命令一次或两次?
  • 您的本地图书馆位于哪里?

要查找您系统上的各种库的位置(除了使用find),看这里:

cat /etc/ld.so.conf  
cat /etc/ld.so.conf.d/* 

在Linux上也有一些标准的地方:

/lib   # for base system (don't use this!) 
/usr/lib  # for package manger installed apps 
/usr/local/lib # for user installed apps 

有许多其他人,但你应该最有可能留在/usr/local/lib。 接下来,您需要告诉您的系统在哪里可以找到这些库。酷系统(谁知道他在做什么)的方式是使用ldconfig,但是,如果你在这里犯了一个错误,你可能会做你后悔的事情。使用该命令最安全的方法是使用标记-v -n使命令详细并指定您需要添加的库目录。

sudo ldconfig -v -n /usr/local/lib/your-uber-libs 

完成。但是,如果你只是想测试的东西,那么还是用你的LD_LIBRARY_PATH直接在命令行,像这样:

LD_LIBRARY_PATH=/usr/local/lib/your-uber-libs ./your_uber_command 

另外,以下内容添加到您的.bashrc脚本。

​​

现在您可以运行您的动态链接命令。