Что такое -lnuma и какая программа использует его для компиляции? - PullRequest
3 голосов
/ 30 января 2012

Я собираю программу для передачи сообщений, используя openmpi с mpicxx на рабочем столе Linux.Мой make-файл выполняет следующие действия:

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 ]

3 голосов
/ 30 января 2012

Сценарию сборки не удается найти библиотеку numa - NUMA (Non Uniform Memory Access). Опция -l указывает компоновщику связать библиотеку, но ваш системный эфир не установил нужную или ваш путь поиска для компоновщика неполный / неправильный.

Попробуйте запросить у менеджера пакетов (apt или rpm) пакет libnuma.

2 голосов
/ 30 января 2012

OpenMPI, и я думаю, что mpich2 использует libnuma («простой интерфейс программирования для политики NUMA (Non Uniform Memory Access), поддерживаемой ядром Linux») для соответствия памяти - чтобы гарантировать, что Память для конкретной задачи MPI остается близко к ядру, на котором выполняется задача, в отличие от того, что она полностью хранится в кэше другого сокета. Это важно для производительности на многоядерных узлах.

Вам может понадобиться использовать YaST для установки libnuma-devel, если ваш компоновщик не может найти библиотеку.

1 голос
/ 27 января 2016

Спасибо Джонатану Дурси!

В Ubuntu имя пакета - libnuma-dev.apt-get install libnuma-dev

0 голосов
/ 18 декабря 2018

Я получил ту же ошибку, работая на удаленном сервере, на котором установлена ​​библиотека 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

В моем случае более крупного процесса сборки (компиляция fftw ) я добавил путь к переменной среды LDFLAGS,

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

, которая исправила проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...