首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加载共享库错误: libgomp.so.1:,错误的GCC版本?

加载共享库错误: libgomp.so.1:,错误的GCC版本?
EN

Stack Overflow用户
提问于 2012-08-14 17:23:20
回答 3查看 23.2K关注 0票数 7

执行第三方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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-14 17:53:12

该程序被链接到特定版本的libgomp (libgomp.so.1)上,并且只能由该版本使用。因此,您必须执行以下操作之一:

  1. 获取应用程序的源代码并自行为您的系统编译,
  2. 获取针对较新版本的gcc编译的应用程序的另一个版本,
  3. 获取应用程序的静态链接版本,
  4. 如果您的发行版支持,请并行安装较旧版本的libgomp,如果不支持,您仍可以获取较旧的libgomp二进制文件并将其放入D11中(最好是D12,如果路径在D13中)、H214、H115,最后,如果可能的话,你可以把“gcc”降级到老版本,让它正常工作。但这是一个糟糕的短期解决方案。
票数 3
EN

Stack Overflow用户

发布于 2012-08-14 17:52:57

您可以使用comamnd ldd查看程序的所有共享库链接依赖项。例如:

代码语言:javascript
复制
$ 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工具,以查看它是否按预期解析库。

票数 3
EN

Stack Overflow用户

发布于 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11949359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档