这个链接到共享库有什么问题?

时间:2012-02-23 17:16:56

标签: linker

所以我正在尝试构建用于WIEN2k的GotoBLAS2,并且在使用make之后,我看到GotoBLAS构建完成(当然,没有make报告的错误)。快速检查文件后发现 libgoto2_prescottp-r1.13.a libgoto2_prescottp-r1.13.so 都包含在目录 / Research / GotoBLAS2中即可。但是,使用一个小的测试程序来仔细检查我的工作,我遇到了以下问题:

labadmin@Gateway:~/Research/Sr2YRuO6-110914$ gfortran Fit-4.2K-0T-110803test.f -L../GotoBLAS2 -lgoto2_prescottp-r1.13 -o Fit-4.2K-0T-110803test.x
labadmin@Gateway:~/Research/Sr2YRuO6-110914$ ./Fit-4.2K-0T-110803test.x
./Fit-4.2K-0T-110803test.x: error while loading shared libraries: libgoto2_prescottp-r1.13.so: cannot open shared object file: No such file or directory

我承认我对链接共享库相当不熟悉,但据我所知,我使用的调用是合适的。任何人都可以帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:1)

问题在于,当您通过-L标志告诉工具链在链接时在何处查找共享库时,您还没有向加载器提供有关在运行时在何处查找依赖库的任何信息。因此,当您尝试运行可执行文件时,它无法找到库。

你没有说你正在运行什么操作系统,但我会根据你的命令猜测Linux或其他一些unix-y的东西。在这种情况下,您可以为您的环境中的LD_LIBRARY_PATH(用于linux的man ld-linux.so,或者您的运行时链接程序的名称)导出值,或者在链接时在可执行文件中设置DT_RUNPATH条目以记录库要搜索的路径(man ld,或者系统上链接器的任何内容)。