linux执行程序:error while loading shared libraries
2017-09-21 11:04
579 查看
linux下有原来别人写好的程序SDK,现在客户要求提供64位的版本,于是修改编译选项 -m32 为 -m64,由于原始代码没有考虑64位的情况,所以对相关代码也进行了修改,其中主要是指针相关的内容,代码中有用32位的整数来保持指针的值,所以这部分是修改的重点。
代码修改完后,编译顺利。
注意,为了和32位版本的区别,64位的SDK文件名后面添加了“64”,这样32位和64位可以同时存在,互不影响。
在编译完后拷贝到 /usr/lib 目录中,如下为32位和64位的两个文件:
[root@localhost test]# ls -l /usr/lib/libVideo*
-rw-r–r– 1 root root 2046494 Sep 20 16:37 /usr/lib/libVideoSDK.so
-rwxrwxrwx 1 root root 2046494 Sep 20 17:39 /usr/lib/libVideoSDK64.so
编译完demo后,运行demo:
[root@localhost test]# ./test64
结果提示如下:
./test64: error while loading shared libraries: libVideoSDK64.so: cannot open shared object file: No such file or directory
有点奇怪,库文件所在的目录没错,之前32位都是这样测试的,后来去网上查找,除了说确实是缺少文件之外,其它大致都是说可以安装其它版本的程序,显然这不适合我的情况,我可以确保所要求的文件确实在对应的目录中。
其中有一个贴子这样描述:
另外一个原因就是已经安装了该共享库, 但执行需要调用该共享库的程序的时候, 程序按照默认共享库路径找不到该共享库文件.
问题同事,似乎也没解。
最后再捉摸上面的那个说明,不管其它的,先照着重新加载一下配置:
[root@localhost test]# ldconfig
然后再执行程序:
[root@localhost test]# ./test64
这个可以了!
这个libVideoSDK64.so之前在 /usr/lib 目录中是没有的,这是我编译后新拷贝进去的,所以可能linux 事先把文件列表放入了内存中,所以如果有新的文件放入这个目录而且要用的话,就必需采用 ldconfig 来刷新内存中的库文件列表才行。
还好,算是找到问题了
代码修改完后,编译顺利。
注意,为了和32位版本的区别,64位的SDK文件名后面添加了“64”,这样32位和64位可以同时存在,互不影响。
在编译完后拷贝到 /usr/lib 目录中,如下为32位和64位的两个文件:
[root@localhost test]# ls -l /usr/lib/libVideo*
-rw-r–r– 1 root root 2046494 Sep 20 16:37 /usr/lib/libVideoSDK.so
-rwxrwxrwx 1 root root 2046494 Sep 20 17:39 /usr/lib/libVideoSDK64.so
编译完demo后,运行demo:
[root@localhost test]# ./test64
结果提示如下:
./test64: error while loading shared libraries: libVideoSDK64.so: cannot open shared object file: No such file or directory
有点奇怪,库文件所在的目录没错,之前32位都是这样测试的,后来去网上查找,除了说确实是缺少文件之外,其它大致都是说可以安装其它版本的程序,显然这不适合我的情况,我可以确保所要求的文件确实在对应的目录中。
其中有一个贴子这样描述:
另外一个原因就是已经安装了该共享库, 但执行需要调用该共享库的程序的时候, 程序按照默认共享库路径找不到该共享库文件.
cat /etc/ld.so.conf
include ld.so.conf.d/*.confecho “/usr/local/lib” >> /etc/ld.so.conf
ldconfig
这个说法也不太对,当然后面的几行命令有啥用,特别是#echo那一行,我确实不知道,但上面的描述说“找不到该共享库文件”,从执行的结果看,确实是找不到库文件,但是我执行32位的程序是没有问题,它就可以找到对应的库文件,显然64位的库文件和32位的库文件在同一目录,不可能一个找得到一个找不到,这就奇怪了。问题同事,似乎也没解。
最后再捉摸上面的那个说明,不管其它的,先照着重新加载一下配置:
[root@localhost test]# ldconfig
然后再执行程序:
[root@localhost test]# ./test64
这个可以了!
这个libVideoSDK64.so之前在 /usr/lib 目录中是没有的,这是我编译后新拷贝进去的,所以可能linux 事先把文件列表放入了内存中,所以如果有新的文件放入这个目录而且要用的话,就必需采用 ldconfig 来刷新内存中的库文件列表才行。
还好,算是找到问题了
相关文章推荐
- 在ubuntu下编译opencv程序后,执行报下面到错误: error while loading shared libraries: libopencv_core.so.2.4: cannot op
- linux执行命令之后显示error while loading shared libraries
- 解决linux运行某程序时提示error while loading shared libraries: abc.so cannot open shared object file
- 在ubuntu下编译opencv程序后,执行报下面到错误: error while loading shared libraries: libopencv_core.so.2.4: cannot op
- linux执行命令之后显示error while loading shared libraries
- 【转】linux中执行外部命令提示" error while loading shared libraries"时的解决办法
- Cloning EBS from Linux 5 to Linux 6 Fails: "Error While Loading Shared Libraries: libclntsh.so.10.1
- linux免安装客户端配置-tnsping: error while loading shared libraries: libclntsh.so.11.1: cannot open shared o
- 普通用户程序使用保留端口 && error while loading shared libraries
- Linux下出现error while loading shared libraries,...cannot open shared object file: No such file..
- 针对Ubuntu下运行可执行文件出现的error while loading shared libraries: xxx.so的解决办法
- arm-linux-gnueabihf-g++: error while loading shared libraries: libstdc++.so.6 no such file and ....
- 执行gm命令时报错:error while loading shared libraries: libjpeg.so.62的解决办法
- 解决 Linux error while loading shared libraries: cannot open shared object file: No such file or directory
- 安装EPG时linux系统报错:error while loading shared libraries
- Linux下redis编程:error while loading shared libraries: libhiredis.so.0.11
- Linux 下error while loading shared libraries的解決方法
- 编译安装postfix, 执行make install时报错: bin/postconf: error while loading shared libraries: libmysqlclient.s
- Linux下报“error while loading shared libraries: libncurses.so.4...”错误的解决方法
- linux添加库后出现 error while loading shared libraries: libjson.so