2016-07-27 70 views
0

我编译了源代码并在LDFLAGS中包含了适当的库文件。然而,因为我想运行二进制文件,它说缺少一个特定的libX.a。如果我将库的路径添加到LD_LIBRARY_PATH,一切都会好的。将库文件添加到二进制文件

是否有任何方法永久性地将该文件包含在二进制文件中以消除LD_LIBRARY_PATH步骤?

LDFLAGS=-L/export/apps/computer/scalapack -L/export/apps/computer/OpenBLAS-0.2.18 
BLAS_LIBS=-lopenblas 
SCALAPACK_LIBS=-lscalapack 

COMP_LIBS=dc_lapack.a liblapack.a libblas.a 
LIBS=$(SCALAPACK_LIBS) $(BLAS_LIBS) 

ldd命令的输出,显示

# ./siesta 
./siesta: error while loading shared libraries: libopenblas.so.0: cannot open shared object file: No such file or directory 
# ldd siesta 
    libopenblas.so.0 => not found 
    ... 

然而,

# ls ../../../computer/OpenBLAS-0.2.18/libopenblas* -l 
lrwxrwxrwx 1 root root  33 Jul 27 11:58 ../../../computer/OpenBLAS-0.2.18/libopenblas.a -> libopenblas_piledriverp-r0.2.18.a 
-rw-r--r-- 1 root root 28091912 Jul 27 11:59 ../../../computer/OpenBLAS-0.2.18/libopenblas_piledriverp-r0.2.18.a 
-rwxr-xr-x 1 root root 14912094 Jul 27 12:00 ../../../computer/OpenBLAS-0.2.18/libopenblas_piledriverp-r0.2.18.so 
lrwxrwxrwx 1 root root  34 Jul 27 12:00 ../../../computer/OpenBLAS-0.2.18/libopenblas.so -> libopenblas_piledriverp-r0.2.18.so 
lrwxrwxrwx 1 root root  34 Jul 27 12:00 ../../../computer/OpenBLAS-0.2.18/libopenblas.so.0 -> libopenblas_piledriverp-r0.2.18.so 

任何想法?

回答

0

你有三种可能性

  1. 链接午睡程序静态的。

或我猜你正在寻找:

  • 在路径上安装OpenBLAS库,已在你的LD_LIBRARY_PATH如/ usr/local/lib目录

  • 使用-Wl,-R /路径/到/ OpenBLAS编译器标志

  • +0

    你能不能说说第一种方法 – mahmood

    +0

    在Makefile或代替-lopenblas用-static取代-shared解释写ŧ他完全路径到openblas静态库到对象fileslist – arved