Linux 下编译实现C/Fortran调用动态库

news2024/11/19 10:21:19

目录

FORTRAN语言

生成动态库Demo

查看动态库中的函数


 

Fortran语言

FORTRAN语言是Formula Translation的缩写,意为“公式翻译”。它是为科学、工程问题或企事业管理中的那些能够用数学公式表达的问题而设计的,其数值计算的功能较强。

FORTRAN语言是世界上第一个被正式推广使用的高级语言。它是1954年被提出来的,1956年开始正式使用,直到2022年已有六十六年的历史,但仍历久不衰,它始终是数值计算领域所使用的主要语言。

Fortran 语言学习(菜鸟都可以看得懂的入门级教程)(持续更新中ing...)_caorui_blog的博客-CSDN博客_fortran

什么是动态库?什么又是静态库?(如何生成/如何使用 ! ! !)_小羊教你来编程的博客-CSDN博客_动态库
 

生成动态库Demo

前提是当前Linux操作系统需要有gfortran gcc g++等编译器。

sub.f90 :

subroutine Sub_Fortran(NumInt,NumFloat,NumDouble)
// 求幂的函数
      implicit none
      integer :: NumInt
      real :: NumFloat
      real(8) :: NumDouble
      NumDouble=NumFloat**NumInt
end subroutine

real(8) function Function_Fortran(NumDouble)
// 开方的函数
      implicit none
      real(8) :: NumDouble
      Function_Fortran=sqrt(NumDouble)
end function

main.c:

#include <stdio.h>

void sub_fortran_(int * num_int,float * num_float,double * num_double);// 求幂函数
double function_fortran_(double *);//开方
// 
int main()
{
      int num_int;
      float num_float;
      double num_double;
      double num;
      num_int=4;
      num_float=2.0;
      sub_fortran_(&num_int,&num_float,&num_double);
      num=function_fortran_(&num_double);
	  // 输出开方后的数 应该是  4
      printf("num_int=%d \n num_float=%f \n num_double=%f \n num=%f \n",num_int,num_float,num_double,num+1 );
      return 0;
}

在当前目录下依次执行:

gfortran -c -fpic sub.f90          把sub.f90       生成sub.o 目标文件
gfortran -shared -o sub.so sub.o       将sub.o链接生成动态库  
// gfortran main.f90 sub.so -o main       如果主函数是用fortran写的可以这样执行
gcc main.c sub.so -o main         生成可执行文件
LD_LIBRARY_PATH=. ./main               

显示:

Linux下动态库文件的文件名形如 libxxx.so,其中so是 Shared Object 的缩写,即可以共享的目标文件。

在链接动态库生成可执行文件时,并不会把动态库的代码复制到执行文件中,而是在执行文件中记录对动态库的引用。

程序执行时,再去加载动态库文件。如果动态库已经加载,则不必重复加载,从而能节省内存空间。

Linux下生成和使用动态库的步骤如下:

  1. 编写源文件。
  2. 将一个或几个源文件编译链接,生成共享库。
  3. 通过 -L<path> -lxxx 的gcc选项链接生成的libxxx.so。
  4. 把libxxx.so放入链接库的标准路径,或指定 LD_LIBRARY_PATH,才能运行链接了libxxx.so的程序。

查看动态库中的函数

通过下列指令查看fortran文件中导出的函数

nm -D XXX.so

readelf -s XXX.so 

中间一栏是T的代表导出的函数名

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/11140.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

样式补充(精灵图、背景图片、阴影),项目前置认知、结构搭建

一、网页制作 根目录 图片文件夹&#xff1a;images 样式文件夹&#xff1a;CSS 首页&#xff1a;index.html <link rel"stylesheet" href"./CSS/index.css"> 二、项目样式补充 1. 精灵图 场景&#xff1a;项目中将多张小图片&#xff0c;合并…

基于粒子群算法训练常规自动编码器附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

docker安装mysql,tomcat,redis,nginx

docker安装常用应用安装mysql解决docker mysql5.7中文乱码的问题开启防火墙指定端口docker MySQL容器被删除后数据恢复docker 配置MySQL主从创建master创建slave配置主从测试安装tomcat安装redis安装nginx安装mysql docker安装之前&#xff0c;需要查看宿主机上是否已安装&…

基于matlab仿真多普勒效应及其影响(附源码)

目录 一、介绍 二、估计直升机的叶片速度 三、直升机回声模拟 四、叶片返回微多普勒分析 五、汽车雷达中的行人识别 六、行人微多普勒提取 七、总结 八、程序 本例介绍了由于目标旋转而对目标进行雷达回波时微多普勒效应的基本概念。可以使用微多普勒特征来帮助识别目标…

UE4 回合游戏项目 16- 控制玩家

在上一节&#xff08;UE4 回合游戏项目 15- 生成玩家、控制玩家&#xff09;基础上&#xff0c;继续完善控制玩家的步骤 步骤&#xff1a; 1.打开1lantu&#xff0c;将Alpha的值设为1&#xff0c;这样玩家控制的角色会随着鼠标的移动而产生一个偏头的效果 2.接下来给角色添加…

java设计模式之原型模式

一&#xff1a;原型模式 1.什么是原型模式? 用一个已经创建的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型对象相同的新对象。 基本介绍 1.原型模式(Prototype模式)是指&#xff1a;用原型实例指定创建对象的种类&#xff0c;并且通过拷贝这些原型&#xff0…

STM32CubeMX学习笔记(47)——USB接口使用(MSC基于内部Flash模拟U盘)

一、USB简介 USB&#xff08;Universal Serial BUS&#xff09;通用串行总线&#xff0c;是一个外部总线标准&#xff0c;用于规范电脑与外部设备的连接和通讯。是应用在 PC 领域的接口技术。USB 接口支持设备的即插即用和热插拔功能。USB 是在 1994 年底由英特尔、康柏、IBM、…

数据库知识之图的创建以及各种遍历、生成树的形成

利用邻接矩阵创建图并打印输出利用递归完成dfs算法遍历利用非递归完成bfs算法遍历利用prim算法得出最小生成树利用kruskal算法得出最小生成树 #include <iostream> #include <cstdlib>//包含一些特定函数 #include <string> //邻接矩阵结构存储图 #defin…

量子计算(六):量子计算软件介绍

文章目录 量子计算软件介绍 一、量子语言 二、量子软件开发包 三、量子云平台 量子计算软件介绍 一、量子语言 由于当前量子计算机的通用体系架构未得到统一&#xff0c;在硬件层面上的技术路线也未最终确定&#xff0c;所以目前还无法确定哪种量子机器指令集相对更科学、…

2010年408大题总结

2010年408大题第41题第42题第43题第44题第45题第46题第47题第41题 这个考的是散列表&#xff08;巧了&#xff0c;我没复习&#xff0c;这就去看&#xff09; 第一个要记住的是装填因子&#xff0c;关键字个数/装填因子 数组长度 第二个是线性探测再散列&#xff0c;表示如果当…

Android App开发之安全加固中反编译、代码混淆、第三方加固以及重签名的讲解及实战(图文解释 简单易懂)

觉得有帮助请点赞关注收藏~~~ 一、反编译 编译是把代码编译为程序&#xff0c;反编译是把程序破解为代码。 下面介绍反编译的完整过程 首先准备反编译的三个工具&#xff0c;分别是apktool&#xff0c;dex2jar&#xff0c;jd-gui 注意下载它们的最新版本 apktool 对APK文件解…

ASEMI整流桥UD6KB100,UD6KB100尺寸,UD6KB100特征

编辑-Z ASEMI整流桥UD6KB100参数&#xff1a; 型号&#xff1a;UD6KB100 最大重复峰值反向电压&#xff08;VRRM&#xff09;&#xff1a;1000V RMS反向电压VR(RMS)&#xff1a;700 平均整流输出电流&#xff08;IO&#xff09;&#xff1a;6A 峰值正向浪涌电流&#xff…

imx6ull内置温度传感器实践1:输出一个采样

前言 先写代码&#xff0c;然后再一个问题&#xff0c;一个问题分析。不是应该先分析问题&#xff0c;再写代码吗&#xff1f;因为笨呗。分析不明白。只有看到现象&#xff0c;才能明白手册上说的是啥意思。 实例1 主要完成以下几个事情 1 创建一个misc驱动 2 在驱动中将寄存…

【HDU No. 1232】 畅通工程

【HDU No. 1232】 畅通工程 杭电OJ 题目地址 【题意】 现有城镇道路统计表&#xff0c;表中列出了每条直接相连的城镇道路。“畅通工程”的目标是使全省任意两个城镇间都可以通过道路连接&#xff08;间接通过路连接也可以&#xff09;。问最少还需要建设多少条道路&#xff…

JUC并发编程第一篇,复习线程基础知识

JUC并发编程第一篇&#xff0c;复习线程基础知识一、为什么多线程极其重要&#xff1f;二、从start一个线程开始认识多线程三、进程、线程和管程四、用户线程和守护线程一、为什么多线程极其重要&#xff1f; 硬件方面&#xff1a;摩尔定律失效 摩尔定律 价格不变时&#xff0…

Java毕业设计基于springboot 美妆化妆品销售购物网站多商家 前后端分离node

美妆化妆品是当前很多女性的必备用品&#xff0c;所以为了能够让更多的女士用上物美价廉的化妆品我们开发了本系统。基于springboot 美妆化妆品销售购物网站本系统以java为核心开发技术&#xff0c;结合springboot VUE框架实现了一个美妆化妆品销售管理系统。美妆化妆品销售管理…

InheritableThreadLocal

补充:关于ThreadLocal,请看这篇文章关于ThreadLocal内存泄漏的问题_小星向上的博客-CSDN博客 引言:最近在查看shiro登录成功后,获取当前登录人的信息时发现了里面使用了InheritableThreadLocal,,但是我好奇,如果我在里面新建了一个线程,那怎么获取登录人的信息呢,结果发现shir…

(经典dp) 骨牌问题 2*n 3*n n*m

文章目录前言题目2*n3*nn*mn < 5 && m < 1e9n*m < 100END前言 用1*2的骨牌铺满一个平面&#xff0c;是非常经典的一系列dp题目 (各大平台几乎都有这类题) 并且随着平面的要求不同&#xff0c;难度也是层层递增 对于n*m若数据量不同&#xff0c;则对应处理的…

2022IDEA的下载、安装、配置与使用

文章目录1.IntelliJ IDEA 介绍1.2 JetBrains 公司介绍1.2 IntelliJ IDEA 介绍1.3 IDEA 的主要功能介绍1.3.1 语言支持上1.3.2 其他支持1.4 IDEA 的主要优势&#xff1a;(相较于 Eclipse 而言)1.5 IDEA 的下载地址1.6 官网提供的详细使用文档2.windows 下安装过程2.1 安装前的准…

CANdelaStudio中的状态跳转图无法查看

诊断协议那些事儿 诊断协议那些事儿专栏系列文章&#xff0c;本文将介绍如何解决CANdelaStudio中的状态跳转图无法查看的问题。 参考文章&#xff1a; CDD文件——CANdelaStudio 10服务-DiagnosticSessionControl States To display a graphical representation of the stat…