我已经从基础存储库为Debian Jessie和Fedora 24安装了clang 3.8。当我尝试用clang++编译一个简单的HelloWorld.cpp测试程序时,我传递了-fopenmp标志,在这两种情况下,我都得到了相同的错误:
/usr/bin/ld:找不到链接器clang-3.8:错误:链接器命令失败,退出代码为1(使用-v查看调用)
我看到,如果我传递-fopenmp=libgomp,它就能工作。然而,Clang OpenMP网站上说,OpenMP运行时随clang3.8一起提供。那么,为什么它找不到默认的libomp库呢?在我的系统中,我没有看到这个库。
发布于 2018-04-03 16:39:53
您的系统上很可能缺少OpenMP开发包。
在Ubuntu上:sudo apt install libomp-dev
发布于 2018-03-14 04:35:25
如果你已经正确安装了libomp,你将需要使用-fopenmp=libomp
。libgomp
是给gcc的。你可能会检查一下,在你的电脑上,clang并没有象征性地链接到gcc。
发布于 2021-04-10 06:20:11
TL;DR
如果在像/usr/lib/llvm-12/lib
这样的地方有用于llvm的libomp.so
,那么可以运行sudo ldconfig
。
简介
在我的例子中,我安装了libomp 12-dev,但它不在我的链接器的库路径中。请参阅我如何找到该库的脚注。在此场景中有几种解决方案:
使用ldconfig
添加库路径
如果要将其放在默认库路径中,请考虑使用ldconfig
。
这将在/etc/ld.so.conf
中查找文件。对于运行Ubuntu20.04的我来说,这个文件只指向包含目录/etc/ld.so.conf.d
中的文件。
$ cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf
因此,我在我的/etc/ld.so.conf.d
目录中创建了一个配置llvm-libomp-12
,如下所示:
$ cat /etc/ld.so.conf.d/libomp.conf
# libomp.so for llvm
/usr/lib/llvm-12/lib
然后我要求ldconfig用sudo ldconfig
更新路径。您可以添加-v
标志,它将打印它知道的所有库和路径。
将库添加到环境变量
我们还可以使用$LD_LIBRARY_PATH
环境变量将链接器指向我们的库
如果您在多用户系统上并且不想影响其他人,或者如果您希望在shell中临时更改库路径,这可能会很有好处。
使用echo $LD_LIBRARY_PATH
查看您当前的$LD_LIBRARY_PATH
。默认情况下,您可能没有此设置。将路径添加到此变量,每个路径由冒号分隔。
对于当前的shell会话,只需像下面这样附加或预先添加到$LD_LIBRARY_PATH
中(假设bash、zsh或fish >v3.0):
export "$LD_LIBRARY_PATH:/path/to/lib"
或者,对于仅限于您的用户的更永久的更改,请将上述导出添加到您的shell的配置文件中(例如~/.bashrc
)。
在编译器标志中手动指定库路径
对于您不总是希望在默认库路径中出现的一次性特定库来说,这很好用。将库的路径指定为如下标志:
-L/path/to/lib
例如:
clang++ -L/usr/lib/llvm-12/lib [...]
make -L/usr/lib/llvm-12/lib
脚注
浅谈搜索
如果你不知道你需要的库在哪里,你可以使用像find
这样的东西。不过,就我个人而言,我使用了一个名为mlocate
的包,它对我机器上的文件进行索引,并允许您对它们进行搜索。
安装mlocate
sudo apt install mlocate
的
更新索引
sudo updatedb
的
搜索子字符串
locate libomp.so
的
当我搜索我的libomp库的位置时,我这样做:
$ locate libomp.so
/usr/lib/llvm-12/lib/libomp.so
/usr/lib/llvm-12/lib/libomp.so.5
/usr/lib/x86_64-linux-gnu/libomp.so.5
值得注意的是,clang似乎在使用linux-gnu目录中的libonp.so.5,但我需要它使用llvm库。
本文中使用的环境
$ lsb_release --all
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.2 LTS
Release: 20.04
Codename: focal
$ uname -a
Linux bip 5.8.0-48-generic #54~20.04.1-Ubuntu SMP Sat Mar 20 13:40:25 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
待办事项
可以添加到这个问题中的一些注意事项:
https://stackoverflow.com/questions/38233646
复制相似问题