立即注册 登录
气象家园 返回首页

lifestyle http://bbs.06climate.com/?12776 [收藏] [复制] [分享] [RSS]

日志

linux下编译代码

已有 349 次阅读2018-8-6 11:28 |个人分类:转载

编译静态链接库

gfortran -c sub.f90 func.f90 
产生了func.mod文件。注:mod文件是静态库的接口。如果删掉了func.mod,编译时候会失败

打包创建一个静态链接库 my.lib
ar rv my.lib func.o sub.o 


使用静态链接库
编译
gfortran -c main.f90 产生main.o

链接
gfortran main.o my.lib -o exe

注:删掉静态链接库my.lib之后仍然可以执行可执行程序
------------------------------------------------------------------------------------------------
编译动态链接库
gfortran sub.f90 func.f90 -shared -fPIC -o libfcode.so

使用动态链接库
编译主程序
gfortran main.f90 libfcode.so -o.exe 

运行(失败尝试)
./exe 失败!找不到动态链接库

解决办法: 设置LD_LIBRARY_PATH,告诉linux系统 运行时候动态链接库的搜索路径 
export LD_LIBRARY_PATH= ./ 
随后再运行

注:ldd命令可以查看可执行文件所依赖的动态链接库。

======================================================
使用第三方函数库
告诉编译器  include (mod文件)、lib(链接时候用到)、DLL Runtime Library 运行时库、路径和文件名

lapack安装(编辑make.inc => 编辑Makefile => make 生成liblapack.a,librefblas.a)

Lapack 使用
演示使用
gfortan test_lapack.f90 -o x   错误:没有定义的'sgesv"

需要把函数库带进来,有三种方法:
1 直接把函数库带进来 (每次都需要输入函数库的名字和路径,比较粗暴的链接方式)
gfortran test_lapack.f90 -o x lapack-3.6.1/liblapack.a lapack3.6.1/librefblas.a
2 将这两个函数库拷到系统lib目录里面去
sudo cp lapack-3.6.1/lib*.a /usr/lib
以后编译时候带上库名称就可以
gfortran test_lapack.f90 -llapack -lrefblas
3 如果没有系统管理员权限,或者不想拷到系统目录下去,有另一种方法。
加-L选项,将函数库所在路径告诉编译器 gfortran test_lapack.f90 -L lapack-3.6.1/ -llapack -lrefblas
如果有include,可能还需要加-I 选项

总结

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

返回顶部