Обходные пути для компиляций на удаленной машине

#compilation #installation

#Сборник #установка

Вопрос:

Недавно я работал на удаленном кластере (операционная система Scientific Linux 6), где у меня нет прав root для установки библиотек, необходимых для компиляции моих C-кодов.

Я столкнулся с несколькими проблемами:

1) Если вы не можете запустить yum для установки того, что вам нужно, что вы можете сделать?

2) Если вы не можете выполнить установку, что вы можете сделать?

3) Как мне запустить мои исполняемые файлы (при условии, что я мог бы их скомпилировать), когда им может потребоваться вызвать библиотеки, не установленные на компьютере?

Я опубликовал этот вопрос, чтобы поделиться тем, что я нашел для решения этой проблемы. Я надеюсь, что это полезно…

Ответ №1:

Поехали!

1) Если вы не можете установить через «yum», вы можете попробовать

1.1) Выясните, в каком репозитории «.rpm» есть нужные вам библиотеки (погуглите для этого).

1.2) Загрузите соответствующий файл «.rpm» на свой домашний компьютер.

1.3) Затем scp репозиторий «rpm» на вашей удаленной машине — или

  scp repository.rpm user@remotemachine.com:/home/user
  

1.4) Затем

 ssh user@remote.com
  

Там сделайте следующее (чтобы «установить» файл rpm без прав root):

 export ins=repository.rpm
rpm2cpio $ins | cpio -idv
  

Это приведет к распаковке вашего rpm-файла, обычно в папку /home /user /usr / lib64.

1.5) Затем вы можете

 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/user/usr/lib64
  

2) Вместо «выполнить установку»:

2.1) Выполнить

 make install --prefix=/home/user/file
  

для «установки» ваших библиотек в /home / user /file

2.2) Затем добавьте /home / user / file в путь к вашей библиотеке LD, как указано выше.

3) Компиляция при наличии библиотек в «забавных» каталогах:

3.1) Скопируйте все необходимые библиотеки в новый каталог /home/user /libs

3.2) Поместите этот каталог в путь к библиотеке LD, т.е.

 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/user/libs
  

3.3) В ваш Makefile для ваших исполняемых файлов добавьте

 $LIBDIR = /home/user/libs

LIBS = -L$(LIBDIR) -llib1 -llib2 ... -llibn
  

(где lib1…libn — это обозначения для ваших библиотек (например, -llapack для библиотек LAPACK).

Надеюсь, это поможет! Всего наилучшего в ваших удаленных вычислениях и удачи!