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

时间:2012-01-30 15:13:26

标签: 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

我的问题是:

什么是-lnuma?什么在使用它?我应该如何与它联系呢?

4 个答案:

答案 0 :(得分:3)

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

尝试查询包管​​理器(apt或rpm)以获取包libnuma。

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

感谢Jonathan Dursi!

在Ubuntu上,包名是libnuma-dev。
apt-get install libnuma-dev

答案 3 :(得分:0)

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

ln -s /usr/lib64/libnuma.so.1 /usr/lib64/libnuma.so
here所述的

可能有效,但就我而言,我无权在/usr/lib64中创建文件。我通过在我有写权限的其他位置创建符号链接来解决此问题:

ln -s /usr/lib64/libnuma.so.1 /some/path/libnuma.so

,然后将此路径添加到编译标志。您的情况应该是

mpicxx -L/some/path -o exp_fit driver.cpp readinp.o

在较大的构建过程中(编译fftw),我将路径添加到LDFLAGS环境变量,

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

解决了该问题。