Linux 什么是-lnuma?什么程序使用它进行编译?

Linux 什么是-lnuma?什么程序使用它进行编译?,linux,compilation,linker,mpi,Linux,Compilation,Linker,Mpi,我正在Linux桌面上使用openmpi和mpicxx编译一个消息传递程序。我的makefile执行以下操作: mpicxx -c readinp.cpp mpicxx -o exp_fit driver.cpp readinp.o 此时我得到以下错误: /usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../x86_64-suse-linux/bin/ld: cannot find -lnuma 我的问题是: 什么是-伊努玛?它在用什么?如何链接

我正在Linux桌面上使用openmpi和mpicxx编译一个消息传递程序。我的makefile执行以下操作:

mpicxx -c readinp.cpp
mpicxx -o exp_fit driver.cpp readinp.o 
此时我得到以下错误:

/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../x86_64-suse-linux/bin/ld: cannot find -lnuma
我的问题是:


什么是-伊努玛?它在用什么?如何链接到它?

构建脚本找不到numa库-numa(非统一内存访问)。l选项告诉链接器链接库,但您的系统没有安装正确的链接器,或者您对链接器的搜索路径不完整/错误


尝试在包管理器(apt或rpm)中查询包libnuma。

OpenMPI,我认为mpich2使用(` Linux内核支持的NUMA(非统一内存访问)策略的简单编程接口')对于内存关联——确保特定MPI任务的内存保持在运行该任务的核心附近,而不是完全保留在另一个套接字上的缓存中。这对于多核节点上的性能非常重要

如果链接器找不到库,您可能需要使用YaST安装libnuma-devel。

谢谢Jonathan Dursi

在Ubuntu上,包名是libnuma-dev。

apt get install libnuma dev

在安装了NUMA库的远程服务器上工作时,我遇到了相同的错误。特别是,存在文件
/usr/lib64/libnuma.so.1
。链接器似乎只查找名为
libnuma.so
的文件。创建符号链接

ln -s /usr/lib64/libnuma.so.1 /usr/lib64/libnuma.so
如前所述,这可能会起作用,但在我的情况下,我没有在
/usr/lib64
中创建文件的权限。我通过在我有写权限的其他位置创建符号链接来解决这个问题:

ln -s /usr/lib64/libnuma.so.1 /some/path/libnuma.so
然后将此路径添加到编译标志。在你的情况下,这将是

mpicxx -L/some/path -o exp_fit driver.cpp readinp.o
对于更大的构建过程(编译),我添加了
LDFLAGS
环境变量的路径

export LDFLAGS="${LDFLAGS} -L/some/path"

这解决了这个问题。

我知道还有其他人在这个系统上使用OpenMPI进行编译。有没有可能我的用户帐户根本没有访问权限?是否需要将路径添加到库所在的位置?如果是这样的话,我如何找到上述路径?这可能取决于您的发行版在哪里可以找到这些内容。大多数发行版都将二进制文件和头文件封装到“libnuma”和“libnuma-devel”等包中。试着搜索两个。如果安装了,您应该能够查询路径(例如rpm-ql libnuma或dpkg-L libnuma)。正确的修复方法是让您的系统管理员安装devel包(
libnuma dev
在ubuntu上,
numatl devel
在RHEL中,…)
libnuma
用于构建开放式MPI,但大多数MPI应用程序不太可能直接使用它(这意味着
libnuma.so.1
在运行时就足够了)