如何解决这个 libgomp1 依赖问题?

如何解决这个 libgomp1 依赖问题?

我尝试在 Ubuntu 16.04 上构建并安装 ccminer 并收到以下错误:

scrypt.cpp:(.text+0xa55b): undefined reference to `GOMP_parallel'
scrypt.cpp:(.text+0xa6cd): undefined reference to `GOMP_parallel'

libgomp1 已安装:

Package: libgomp1
Status: install ok installed
Priority: optional
Section: libs
Installed-Size: 156
Maintainer: Ubuntu Core developers <[email protected]>
Architecture: amd64
Multi-Arch: same
Source: gcc-5
Version: 5.4.0-6ubuntu1~16.04.5
Depends: gcc-5-base (= 5.4.0-6ubuntu1~16.04.5), libc6 (>= 2.17)
Breaks: gcc-4.3 (<< 4.3.6-1), gcc-4.4 (<< 4.4.6-4), gcc-4.5 (<< 4.5.3-2)
Description: GCC OpenMP (GOMP) support library
 GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers
 in the GNU Compiler Collection.
Homepage: http://gcc.gnu.org/
Original-Maintainer: Debian GCC Maintainers <[email protected]>

这些库可以在这里找到:

locate libgomp

/usr/lib/gcc/x86_64-linux-gnu/5/libgomp.a
/usr/lib/gcc/x86_64-linux-gnu/5/libgomp.so
/usr/lib/gcc/x86_64-linux-gnu/5/libgomp.spec
/usr/lib/x86_64-linux-gnu/libgomp.so.1
/usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
/usr/share/doc/libgomp1
/var/lib/dpkg/info/libgomp1:amd64.list
/var/lib/dpkg/info/libgomp1:amd64.md5sums
/var/lib/dpkg/info/libgomp1:amd64.shlibs
/var/lib/dpkg/info/libgomp1:amd64.symbols
/var/lib/dpkg/info/libgomp1:amd64.triggers

是否可以以某种方式在配置/生成文件中指定库的位置?

生成文件包含:

OPENMP_CFLAGS = -fopenmp

如果相关的话,我安装了 Anaconda,因为我读到这可能会干扰某些构建过程。

链接到 build.sh 的 VERBOSE 输出

输出要点

gcc 和 g++ 版本:

g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.5) 5.4.0 20160609

gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.5) 5.4.0 20160609

答案1

看起来您正在使用发行版的默认 gcc 版本(可能是 6 或 7)。根据安装文档,gcc 5 是唯一受支持的版本。您可以使用 检查版本gcc --version。要更改 Ubuntu 上的版本,请运行以下命令:

sudo apt-get install gcc-5 g++-5
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 1
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 1

答案2

我遇到了完全相同的问题,正如 OP 所预测的,我的问题与 Anaconda 安装有关,删除它后得到了修复。我注意到运行locate libgomp产生的输出与 OP 类似,但与 Anaconda 相关的结果位于顶部。

卸载后,输出是相同的,我可以使用默认配置构建 ccminer。

这个帖子详细介绍了如何卸载 Anaconda

答案3

我不知道你有多少编译经验,但一般来说,安装一个库不一定足够。要针对库进行编译,您还需要安装开发标头。该软件包通常称为 [library-name]-dev,因此请检查并确保已安装。对于这个,它可能在软件包安装程序中被称为“libgomp1-dev”,或类似的名称。

您发布的错误看起来像是编译器错误。当您运行配置脚本时,它对 libgomp 说了些什么?它通常会检查依赖库。

编辑:

头文件通常存储在/usr/include/usr/local/include默认情况下。我刚刚查看了我的文件,没有看到任何看起来与 libgomp 相关的标头。我还安装了 libgomp1 软件包,但没有安装 libgomp1-dev。事实上,我的发行版存储库(Trisquel 7,基于 Ubuntu)中似乎没有可用的 libgomp1-dev 软件包。我建议您查看它应该使用哪个头文件以及在哪里可以找到它。

相关内容