执行第三方c++程序时,出现以下错误:
加载共享库时出错: libgomp.so.1:无法打开共享对象文件:没有这样的文件或目录
libgomp.so.1库是GNU编译器集合OpenMP运行时库。
这是不是GCC套餐的一部分?我可以在使用gcc-4.5的系统上运行该程序,但不能在使用gcc-4.3或gcc-4.6的系统上运行该程序。
或者我需要安装另一个包?
我试图通过下载该库并将其放到库中,在系统上使用gcc-4.3手动修复此问题,但随后我得到了另一个缺少的库: /usr/lib/libstdc++.so.6:找不到版本`GLIBCXX_3.4.11。libstdc是GNU标准C++库,所以这也表明是错误版本的GCC?
我不是一个C++开发人员,所以我不完全了解这些库是什么,也不知道这些库一般是如何处理C++代码的。
操作系统是linux 64位。
gcc-4.3机器: openSUSE 11.1
gcc-4.5机器: openSUSE 11.4 (程序在这台机器上运行)
gcc-4.6机: openSUSE 12.1
发布于 2012-08-14 17:53:12
该程序被链接到特定版本的libgomp (libgomp.so.1)上,并且只能由该版本使用。因此,您必须执行以下操作之一:
发布于 2012-08-14 17:52:57
您可以使用comamnd ldd查看程序的所有共享库链接依赖项。例如:
$ ldd /bin/ls
linux-gate.so.1 => (0xb76fe000)
libselinux.so.1 => /lib/i386-linux-gnu/libselinux.so.1 (0xb76be000)
librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xb76b5000)
libacl.so.1 => /lib/i386-linux-gnu/libacl.so.1 (0xb76ab000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7506000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb7501000)
/lib/ld-linux.so.2 (0xb76ff000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb74e6000)
libattr.so.1 => /lib/i386-linux-gnu/libattr.so.1 (0xb74e0000)现在,如果您想在另一台计算机上运行此程序,并且共享库的版本有问题,您可以尝试将该批文件复制到一个目录中,然后使用LD_LIBRARY_PATH技巧。但请注意,不能复制某些库:
ELF不是一个真正的文件,而是一个通向内核解释器( land.
/lib/ld-linux-so.2:)的网关。在每个动态链接的可执行文件的头中都有一个对它的静态引用。请勿复制it.
[/usr]/lib/i386-linux-gnu/*:此目录中的所有内容都是特定于体系结构的。如果两台机器具有相同的体系结构,它可能会工作。如果不是,则必须在[/usr]/lib/<your-real-arch>/*.下查找同名的库
在目标机器上,您还可以在export LD_LIBRARY_PATH=...之后使用ldd工具,以查看它是否按预期解析库。
发布于 2012-08-14 17:51:50
看起来你的程序是使用gcc-4.5编译和链接的,这意味着你将很难把它移植到4.5之前的版本。一个发行版(假设Linux)中的依赖关系不容易被带到核心库的下一个主要版本,如clib和c++lib。将您的gcc-4.3计算机标准升级到下一个Linux-发行版要容易得多。
对于gcc-4.6机器,您可能需要搜索包含libgomp.so.1的compat包。这是依赖于发行版的,我不知道这里的细节。
在你的机器上可能有提取so依赖信息的工具,请尝试
man ldd
https://stackoverflow.com/questions/11949359
复制相似问题