我正在尝试将我的主要代码链接到库
主要代码:
program main1
call test1
end program main1
库:
subroutine test1
print*,'ok'
end subroutine test1
然后我创建了库:
gfortran -shared -fPIC -o lib1.so 1.f90
并编译主代码
gfortran -c main.f90
和链接
gfortran main.o lib1.so
但是我遇到了这个错误:
./a.out: error while loading shared libraries: lib1.so: cannot open shared object file: No such file or directory
我做错了什么?
答案 0 :(得分:2)
您的示例确实有效,但您只是遗漏了一件小事:当使用共享库时,您的程序(main.f90 / a.out)将尝试在其中一个库文件夹中找到链接库(例如/lib*
,/usr/lib*
或/usr/local/lib*
)。
如果要为共享库指定另一个文件夹(例如,用于测试/调试),可以使用环境变量LD_LIBRARY_PATH来"告诉" linux另一个寻找共享库的地方。
因此,假设您在/home/mojijoon/fortran
文件夹中编写了程序,则可以在设置库路径后获得正确的输出:
$: export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/home/mojijoon/fortran
$: ./a.out
ok
您可以在此处找到有关共享库(以及LD_LIBRARY_PATH环境变量)的更多信息: tldp.org - shared libraries