Fortran“参数”类型不包含在编译对象中

2023-12-09

我有一个 Fortran 模块,其中包含一些具有属性的变量parameter有些有属性save. The parameter那些不包含在编译的对象中,这在尝试组装库时成为一个问题。例如,考虑一个文件testModule.f90:

module testMOD
  integer, save :: thisIsSaved = 1
  integer, parameter :: thisIsParametered = 2
end module testMOD

我用以下方法编译:ifort -c testModule.f90。当我检查里面的内容时:

>$ nm testModule.o
0000000000000000 T testmod._
0000000000000000 D testmod_mp_thisissaved_

只有thisIsSaved变量就在那里。我知道我可以改变thisIsParametered to save而不是parameter但是,理想情况下,我想阻止链接用户更改此值。有没有办法做到这一点?

Edit:我希望 C 代码也可以访问这个库,而不仅仅是 Fortran。


它实际上应该存储在 .mod 文件中。所有数据类型和函数原型都存储在那里,这就是为什么当您向某人发送 .lib 文件时需要包含它。在其他地方使用模块后尝试链接该模块,它应该可以正常工作。

本质上,.mod 文件与 c 中的 .h 文件具有相同的用途,因此您当然必须将其包含在您的库中。

[更新:] 如果您尝试在 C 中使用它,那么正如您所说,您无法轻松维护命名常量。作为替代方案,您可以在实体上使用 protected 属性。至少对于 Fortran,模块外部的任何内容都被限制写入变量。我不知道 C 编译器和链接器是否会尊重这种行为,但我认为这可能是你最好的选择。

module testMOD
 INTEGER, PROTECTED, BIND(C)  :: globalvar = 1
end module testMOD

不幸的是,我并没有在与 C 的互操作性方面做太多工作,所以我不能真正保证 C 会尊重 protected 属性并且不允许更改变量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Fortran“参数”类型不包含在编译对象中 的相关文章

  • 静态链接 libpng 到共享库

    我已将问题简化为最小的 test c include png h int function printf ld long png create read struct 编译用 gcc shared fPIC test c o test so
  • Xcode:复制标头:公共、私有、项目?

    我正在构建一个 Cocoa Touch 静态库 我应该如何决定是否将头文件复制为公共 私有或项目 Public 该界面已最终确定 可供产品的客户使用 公共标头作为可读源代码包含在产品中 不受限制 Private 该界面不适用于您的客户 或者
  • 静态库 (.a) 和共享库 (.so) 之间的文件格式差异?

    我知道关于共享库和静态库的用例有很多问题 这个问题与此无关 我问的是磁盘上存储的文件格式的差异 为什么问题是 两者之间有什么区别 或者它们完全相同 只是用途不同 我相信它们是不一样的 因为在共享库上运行 nm 需要 D 标志 显然它需要做一
  • Android.mk 包含其他项目

    说明 我的问题的目标是了解如何创建一个可以构建和运行的 Android mk makefile 如下所示的项目结构 Library is library on eclipse 数据 项目库 Project Interface 包含 1 个静
  • 可变格式

    我编写了一个程序来计算平方有限差分矩阵 您可以在其中输入行数 等于列数 gt 这存储在变量矩阵中 该程序运行良好 program fin diff matrix implicit none integer dimension allocat
  • 编译错误:无法打开模块文件

    我有这个代码 PROGRAM xfit driver for routine fit USE nrtype USE nrutil USE nr USE ran state ONLY ran seed IMPLICIT NONE INTEGE
  • Fortran if stop 需要 endif 吗?

    在 fortran 90 中 if stop 语句是否需要结束 endif example if foo eq 1 stop do some stuff do some stuff 是循环的一部分还是 stop 意味着程序结束时 endif
  • 如何调用模块中子程序内部的函数?

    我有一个包含子例程的模块 该子例程又包含一个函数 我说use themodule在我的主程序中 我可以call thesubroutine 但是如何访问子例程中包含的函数呢 代码如下所示 module useful integer para
  • 如何在我的项目中使用 FFTW DLL 导入库 .lib 作为静态 .lib?

    我了解 C 和编译小型插件 始终基于类似且布局的工作流程 虽然目前我需要将最新版本的 FFTW 编译成静态库 或者从编译版本中获取它 这应该会容易得多 但这给了我一个非常困难的时间 可能是因为我不知道编译的来龙去脉 请注意 我正在使用 Vi
  • 最佳 Fortran IDE [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 stackoverflow上有人用Fortran吗 您使用什么 IDE 您认为哪一个是最好的 似乎我周围的很多人都对 Intel Visu
  • 将数组从 .npy 文件读入 Fortran 90

    我使用 Python 以二维数组 例如 X 的形式生成一些初始数据 然后使用 Fortran 对它们进行一些计算 最初 当数组大小约为 10 000 x 10 000 时 np savetxt 在速度方面表现良好 但是一旦我开始增加数组的维
  • 在一条语句中对多个变量进行相同的赋值

    有没有一种方法可以为不同的变量分配相同的值 而无需在单个语句中构造数组 例如 如果我有变量a b c d and e 我可以分配类似的东西吗 a b c d e 10 0 我知道我可以用一行来做 a 10 0 b 10 0 c 10 0 d
  • Xcode 找不到我的静态库!

    这是链接器错误 i686 apple darwin10 gcc 4 2 1 Users william Documents SettingsLibrary build Debug iphonesimulator libSettingsLib
  • 什么时候使用静态库需要头文件?

    如果我在 Linux 中用 C 创建一个静态库并生成 a 文件 我 或其他人 如何使用该库 例如 我的库定义了一个类 我认为仅仅提供 a 文件是不够的 还需要提供头文件 我如何知道 a 文件必须提供哪些头文件 例如 我是否需要提供我的库代码
  • 使用 Visual Studio 2013 构建 Qt 5.2.1 的静态版本

    几天来我一直在尝试使用 Visual Studio 2013 构建 Qt 的静态版本 我就是不明白我做错了什么 System Windows 7 64 位 Visual Studio 2013 仍安装 Visual Studio 2012
  • 与 Qt 项目的静态链接

    我有一个在 Visual Studio 2010 Professional 中构建的 Qt 项目 但是 当我运行它 在调试或发布模式下 时 它会要求一些 Qt dll 如果我提供 dll 并将它们放入 System32 中 它就可以工作 但
  • C++ php 和静态库

    我创建了一个library a 其中包含 cpp 和 h 文件 其中包含很多类 嵌套类和方法 我想在 php 示例中包含这个静态库并尝试使用它 我想提一下 我是 php 新手 我已经在 test cpp 文件中测试了我的 libray a
  • 静态库中的单例类

    假设我在静态库中有一个单例类 S 它可以与其他动态库 D1 D2 D3 链接 因此 据我了解 类 S 在每个 D1 D2 和 D3 中都会有一个单独的实例 即使它不是单例 如全局 这也是正确的 有什么办法可以防止S类的多副本吗 我无法将单例
  • 使用 MacLaurin 展开的 Fortran Sine 函数的微小差异

    我正在用 Fortran 创建一个程序 它接受以弧度表示的 sin x 的 x 然后是要计算的项数 这是我的程序 Sine value using MacLaurin series program SineApprox implicit n
  • 如何格式化整数以仅具有所需的大小?

    我一直在尝试以下代码 program hello write i9 10 end program hello 并改变格式字符串 尝试使写入输出的字符串大小恰好满足表示整数所需的大小 但到目前为止我无法管理它 如何在 Fortran 中编写

随机推荐

  • GoogleTest CMake 无法识别 TEST_F:就像它无法识别 GTest 一样

    好吧 我承认 这是一个特殊的案例 当我们构建应用程序时 我们使用 make 因此我将测试包含在 src 下的测试文件夹中 然后 在与发布文件夹相同的级别 我们创建了一个单元测试文件夹 其中包含所有源文件和测试源文件 但我的IDE是CLion
  • 使用 ROCR 和 pROC (R) 计算平均 AUC 的差异

    我正在使用来自 SVM RFE 模型的交叉验证数据 10 倍重复 5 次 caret包裹 我知道caret包适用于pROC计算指标时包 但我需要使用ROCR包以获得平均 ROC 然而 我注意到使用每个包时的平均 AUC 值并不相同 所以我不
  • 使用 python 在 os.system 的参数中使用行“找不到命令”

    我是 python 新手 正在从事一些 xyz 项目 其中我正在获取第一天日期的报告 获取数据并将其重定向到 Linux 机器上的另一个文件中 这是我的代码 usr bin python import os cur date os pope
  • WCF Web 服务从 SoapUI 超时

    我在 WCF 项目 Net 4 0 中有以下内容 ServiceContract public interface EchoService OperationContract void Ping ServiceBehavior public
  • 使用 Spring Batch 的复杂 XML; StaxEventItemWriter ; Jaxb2Marshaller

    我需要使用 Spring Batch 编写稍微复杂的 XML 谁能帮我进行适当的 Spring 配置吗 以下是该过程所需的输出
  • 在 R 中查找排序向量中的值索引

    我在 R 中有一个由唯一整数组成的有序向量 我想找到最接近但小于或等于某个值的元素的索引 例如 对于向量4 8 15 16 23 42和搜索值17 我希望函数返回4 指数16 在Python中 我会使用bisect模块 R中有类似的东西吗
  • 即使使用 strip_cdata=False 之后,CDATA 也会在 lxml 中被剥离

    我有一个要求 我需要读取 XML 文件并用特定值替换字符串 XML 包含 CDATA 元素 我需要保留它 我尝试使用解析器并将 strip data 设置为 false 这是行不通的 需要帮助找出实现它的方法 import lxml etr
  • PostgreSQL 连接问题

    我的应用程序有一个非常奇怪的问题 有时在连接到 postgres 时会出现以下错误 这种情况的发生没有任何模式 当我运行一些广泛的硒测试时经常发生 警告 pg connect function pg connect 无法连接到 Postgr
  • 如何在 Web 应用程序前端强制 fetch 接受自签名证书?

    我正在制作一个简单的 Web 应用程序前端原型 它需要从我的服务器获取 JSON 数据 服务器本身工作正常 我可以单击链接 JSON 数据就会显示在浏览器中 但以下简单脚本失败了 fetch https x x x x 8000 MY UR
  • 安装前获取功能安装成本

    我们正在为您的安装制作自定义引导程序 外部 UI 我们希望提供一个 自定义安装 对话框 就像在 MSI 中一样 以允许用户选择他们想要安装或删除的功能 目前 我们能够从 MSI 数据库本身读取功能 以及其他功能详细信息 例如描述 通过在 M
  • 如何在 ASP.NET Core 中创建角色并将其分配给用户?

    我正在使用 ASP NET Core 默认网站模板 并将身份验证选择为 个人用户帐户 如何创建角色并将其分配给用户 以便我可以使用控制器中的角色来过滤访问权限 我的评论已被删除 因为我提供了我回答的类似问题的链接here 因此 这次我会更描
  • NSDecimalNumber 乘法奇怪

    ExclusivePrice 数量都是 NSDecimalNumbers NSDecimalNumber price exclusivePrice decimalNumberByMultiplyingBy quantity NSLog ex
  • pexpect 相当于 Expect 的“send_user”

    作为我的延续上一个问题在 pexpect 中构建交互式选项菜单时 交互输入过滤器中的打印语句只有在交互完成后才会发送到 stdout 该文档似乎没有包含与 Expect 中的 send user 等效的方法 是否有任何解决方法可以将输出发送
  • 添加新行后无法“刷新”filamentgroup tablesaw 响应表

    我正在使用 AngularJS Utils 分页指令和filamentgroup tablesaw 响应式表库的组合来尝试获得响应式 通过向右滑动 分页表 一旦我填充了表格 我就从另一个名为responsive table的指令中调用tab
  • 从打印语句中删除最后一个分隔符

    这是对整数数组进行排序的方法 如何从输出中删除最后一个分隔符 public void Sort int sort for int a sort System out print a Output 1 2 3 4 5 6 7 8 9 10 1
  • 仅将圆角添加到 UITableView 的顶部?

    我试图仅向 UITableView 的顶角添加圆角 但问题是 使用下面的代码 它只会在整个 UITableView 上形成黑色层 我该如何解决这个问题 Rounded Corners for top corners of UITableVi
  • 基于 Android 4.0 的 Virtual Box 模拟器无法检测到笔记本电脑的蓝牙 4.0

    目前我正在开发与蓝牙 4 0 设备通信的 Android 应用程序 截至目前 我包括博康布尔在我的应用程序中并做了一些示例代码 实际上我没有基于蓝牙 4 0 的 Android 智能手机 因此出于测试目的 我只是安装了 Oracle Vir
  • Websocket 使用队列等待服务器响应

    我使用 websocket 发送和接收数据 每秒最多 30 条小消息 我希望客户端发送 websocket 有效负载并等待来自服务器的特定消息 Flow 客户端发送请求 它还将 requestId 163 存储在waitingRespons
  • D3:将鼠标滚轮重新映射为平移手势而不是缩放手势

    默认情况下 当您在 D3 中创建新的缩放行为时 它会映射鼠标滚轮来控制缩放级别 如果图表大于图表区域 您还可以单击并拖动来平移图表 我想重新映射鼠标滚轮手势以在垂直轴上平移 鼠标滚轮向上平移 鼠标滚轮向下平移 有人知道如何实现这一目标吗 好
  • Fortran“参数”类型不包含在编译对象中

    我有一个 Fortran 模块 其中包含一些具有属性的变量parameter有些有属性save The parameter那些不包含在编译的对象中 这在尝试组装库时成为一个问题 例如 考虑一个文件testModule f90 module