6

我一直在尝试编译一个在 suse 上使用 OpenMP 和 gcc --version 4.9.4 的程序

> g++ -std=c++11 -o a.exe -fopenmp ./file.cpp
> ./a.exe

./a.exe: /usr/lib64/libgomp.so.1: 找不到版本“GOMP_4.0”(./a.exe 需要)

我有一个名为“/usr/lib64/libgomp.so.1”的文件,我该如何修复它?

4

2 回答 2

6

由于您安装了多个 GCC 编译器(4.3 和 4.9),因此您的问题很可能是因为您使用 GCC 4.9(支持 OpenMP 4.0)进行编译,但在运行时操作系统加载程序使用 GCC 4.3 库(不支持 OpenMP 4.0)。

有一些替代方法可以避免此问题:

  1. 通过-static在链接时使用静态编译您的二进制文件。
  2. 使 O/S 搜索适当的库而不是旧库。你可以使用命令

    find / name -name libgomp.so.1
    

    列出系统中可用的 libgomp 库,然后将存储它的目录添加到LD_LIBRARY_PATH环境变量中。

  3. 除了 2),您还可以告诉链接器生成一个二进制文件,并让它知道除了 LD_LIBRARY_PATH 指向的位置之外,在哪里可以找到其他共享库。您还可以使用 gcc ... -Wl,-rpath -Wl,<dir>/lib(或 lib64 而不是 lib,如果适用)其中<dir>指的是第 2 点中的目录)。
于 2016-08-18T15:04:52.997 回答
1

从这里安装正确的新库http://packages.ubuntu.com/search?keywords=libgomp1在类似的情况下帮助了我。

于 2017-01-13T11:19:46.640 回答