Я устанавливаю программное обеспечение на сервер без прав root. Я сталкиваюсь со следующей ошибкой при установке:
make[1]: *** [hgaprec] Error 1
make[1]: Leaving directory `/seq/.../SOFTWARE/hgaprec/src'
make: *** [all-recursive] Error 1
Making install in src
make[1]: Entering directory `/seq/.../SOFTWARE/hgaprec/src'
g++ -O3 -o hgaprec ratings.o main.o log.o hgaprec.o -larpack -llapack -
lblas -lgsl -lpthread -lgslcblas
/.../software/free/Linux/redhat_6_x86_64/pkgs/gcc_5.2.0/bin/ld: cannot
find -larpack
collect2: error: ld returned 1 exit status
make[1]: *** [hgaprec] Error 1
make[1]: Leaving directory `/seq/.../SOFTWARE/hgaprec/src'
make: *** [install-recursive] Error 1
Поскольку библиотека arpack не может быть найдена, я установил ее здесь /seq/…/SOFTWARE/hgaprec/ARPACK и обнаружил, что процесс сгенерировал статический файл libarpack_LINUX.a. Чтобы связать эту статическую библиотеку с gcc, была использована следующая команда:
gcc -larpack -L/seq/.../SOFTWARE/hgaprec/ARPACK/libarpack_LINUX.a
Тем не менее, я продолжаю получать ту же ошибку при установке программного обеспечения, что larpack не был найден. Я неправильно использую команду связывания?
Вы либо хотите gcc main.c /seq/../SOFTWARE/hgaprec/ARPACK/libarpack_LINUX.a
(тебе не нужно -l
а также -L
если вы указываете полный путь к статической библиотеке), или как предложено @Julian_Cienfuegos gcc main.c -L/seq/../SOFTWARE/hgaprec/ARPACK/ -larpack_LINUX
, Это предполагает, что вы компилируете только один файл с именем main.c
который содержит ваш main()
функция и выводит a.out
двоичный файл.
РЕДАКТИРОВАТЬ: Добавлено объяснение main.c
,
Моя проблема была решена после включения пути библиотеки ARPACK как части флага LD в configure следующим образом:
./ configure —prefix = / seq /…/ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ / hgaprec LDFLAGS = «- L / seq /…/ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ / hgaprec / ARPACK /»