【发布时间】:2017-10-19 22:56:58
【问题描述】:
我在没有 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 -m64 -W,verbose ...,它应该告诉链接器准确地显示它正在寻找的位置 -
不要把库的名字放在-L后面,只要是它所在的目录。我不知道这是否重要,但你应该只是把目录。例如,如果我链接到 libA.a,我会输入:
gcc main.c -L/path/to/lib -lA -
所以你应该试试
gcc main.c -L/path/to/lib -larpack_LINUX -
为什么
/seq后面有..,你是在缩写长路径吗?如果是字面值,/seq/../SOFTWARE/hgaprec/ARPACK/等价于/SOFTWARE/hgaprec/ARPACK。 -
使用缩写作为路径太长
标签: c++ gcc installation arpack