加载共享库时出错

我正在使用g ++编译器在Ubuntu上运行eclipse,我正在尝试运行一个使用xerces的示例程序。 构建没有产生任何错误,但是当我试图运行程序时,我会收到此错误:   
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
在目录
/opt/lib
中,我已将其作为eclipse中的库包含在内。我检查文件夹时文件就在那里。当我执行
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)
    
已邀请:
尝试以root身份运行
ldconfig
以查看它是否解决了问题。     
我将所有库文件从/ opt / lib复制到/ usr / lib中,程序现在可以运行了。谢谢你的回复。     
运行
ldd libxerces-c-3.1.so
并检查输出以查看是否可以找到所有依赖项。     
有很多方法可以做到这一点,这里已经提到了很多。但是,您希望避免意外地将库文件复制到系统中/上。这很容易做到,因为人们几乎没有想象为他们的图书馆制作原始的唯一名称。 所以有几件事要考虑: 您是否需要将这些文件作为系统的永久部分? 您是否只需安装进行测试和频繁更新? 你只需要它们一次或两次运行那个特定的命令吗? 您的本地图书馆在哪里? 要在系统上查找各种库位置(除了使用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
脚本中。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/your-uber-libs
现在您可以运行动态链接的命令。     
尝试安装库libxerces-c3.1 as。使用下面提到的命令安装库。
 sudo apt-get install libxerces-c3.1
这对我来说就像一个魅力。     

要回复问题请先登录注册