我收到的内部使用的某些代码要求库使用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
的内容指向包库中的相似元素。
我以为符号链接将被优雅地取消引用。
符号链接的引入使编译过程变得混乱。
我是否隔离了此问题的真正起因?
这种情况可以识别吗?
造成混乱的原因是什么?
有没有办法解决这个问题?