LIBRARY_PATH无法处理到所请求库的符号链接

时间:2019-01-15 09:47:22

标签: compilation linker mpic++

起点

我收到的内部使用的某些代码要求库使用mpicxx进行编译,例如-lboost_filesystem。如果设置

,建筑物将运行平稳
export LIBRARY_PATH=<boost lib directory>
export LD_LIBRARY_PATH=<boost lib directory>:$LD_LIBRARY_PATH

注意,boost库目录位于主目录中,并且无法更改。

动作

为了更整洁地管理库,我考虑过创建另一个具有~/lib权限的本地目录drwxr-xr-x,并包含指向特定软件包库的符号链接。

此存储库的内容为(ll ~\lib

lrwxrwxrwx 1 ... libboost_filesystem.a -> <boost lib directory>/libboost_filesystem.a*
lrwxrwxrwx 1 ... libboost_filesystem.so.1.62.0 -> <boost lib directory>/libboost_filesystem.so.1.62.0*
lrwxrwxrwx 1 ... libboost_filesystem.so@ -> <boost lib directory>/libboost_filesystem.so.1.62.0*

链接包含绝对路径,并且运行良好。 目标文件的权限为755。

问题

但是,如果我使用相同的程序来构建

export LIBRARY_PATH=<lib repository>
export LD_LIBRARY_PATH=<lib repository>:$LD_LIBRARY_PATH

链接器抛出重定位和错误值错误

/usr/bin/ld: ~/lib/../lib/libboost_filesystem.a(operations.o): relocation R_X86_64_PC32 against symbol `_ZN5boost6detail15sp_counted_base7destroyEv' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status

诊断

我将此错误归因于LIBRARY_PATH引起的一些混乱,因为如果我设置,构建会成功终止

export LIBRARY_PATH=<boost lib directory>  # see Starting point
export LD_LIBRARY_PATH=<lib repository>:$LD_LIBRARY_PATH  # see Action

这使我感到反感,因为~/lib的内容指向包库中的相似元素。 我以为符号链接将被优雅地取消引用。 符号链接的引入使编译过程变得混乱。

问题

我是否隔离了此问题的真正起因?

这种情况可以识别吗?

造成混乱的原因是什么?

有没有办法解决这个问题?

0 个答案:

没有答案