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“参数”类型不包含在编译对象中 的相关文章

  • gfortran 未定义的引用

    我正在尝试编译一个依赖很多东西的程序 我使用并修改了提供的 makefile 来代表我的计算机设置 但在编译的最后一步中我不断收到许多未定义的引用 导致问题的命令行是 gfortran o cosmomc ParamNames o Matr
  • 纯 Fortran 过程中的 I/O

    我正在尝试将错误检查合并到我正在编写的纯过程中 我想要这样的东西 pure real function func1 output unit a implicit none integer a output unit if a lt 0 th
  • 最佳 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 实现单例模式 它的实现中有一个静态变量 A 库被编译为静态库 现在 假设我的项目中有 B 另一个静态链接的静态库 A C 另一个静态链接的静态库 A D 一个顶级程序链接 B and C 最后 我的单例真的是单例 并且我
  • 使用 g++ 从 cpp 文件和静态库创建共享库 [重复]

    这个问题在这里已经有答案了 就像标题所说 我想从三个 cpp 文件和一些静态库创建共享库 基本上我想这样做 g libProject so file1 cpp file2 cpp file3 cpp I usr local include
  • 与 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类的多副本吗 我无法将单例
  • 所需框架与静态库

    构建现代框架 https developer apple com videos play wwdc2014 416 says 每个应用程序都有自己的自定义框架副本 https stackoverflow com a 15262463 242
  • 针对 dll/lib 的 cmake 链接

    我的 cmake 的输出是一个静态库 我正在这样创建它 add library myMainLib STATIC BACKEND SOURCES 当我尝试让 myMainLib 链接到第三方 lib dll 时 出现了问题 dll 文件将在
  • 库和可执行文件的大小

    我有一个在 Windows 上使用 MSVC 创建的静态库 lib 库的大小为 70KB 然后我有一个链接该库的应用程序 但现在最终可执行文件 exe 的大小为 29KB 小于库 我想知道的是 由于该库是静态链接的 我认为它应该直接添加到可
  • Fortran 递归分段错误

    我必须设计并实现一个 Fortran 例程来确定方格上簇的大小 并且递归地编写子例程似乎非常方便 然而 每当我的晶格大小超过某个值 大约 200 边 时 子例程就会始终出现段错误 这是我的集群检测例程 RECURSIVE SUBROUTIN
  • 这些双精度值如何精确到小数点后 20 位?

    当精度是一个问题时 我正在测试一些非常简单的等价错误 并希望以扩展双精度执行操作 这样我就知道答案在 19位数字中 然后以双精度执行相同的操作 其中第 16 位会有舍入误差 但不知何故 我的双精度算术保持了 19 位精度 当我在扩展双精度中
  • Fortran 意图(inout)与省略意图

    良好的实践表明 Fortran 中的子例程参数每个都应具有指定的意图 即intent in intent out or intent inout 如上所述这个问题 https stackoverflow com questions 1011
  • 静态库和共享库的区别?

    静态库和共享库有什么区别 我使用 Eclipse 有多种项目类型 包括静态库和共享库 一个比另一个有优势吗 共享库是 so 或在 Windows 中为 dll 或在 OS X 中为 dylib 文件 与该库相关的所有代码都在此文件中 并由在
  • 带有数字/标签的 Fortran IF 语句而不是另一个语句

    这段 Fortran 代码的含义是什么 IF J1 3 20 20 21 21 J1 J1 3 20 IF J2 3 22 22 23 23 J2 J2 3 22 CONTINUE 我在旧项目中看到过 我不知道这个带有数字 标签 的 IF
  • 将结构化数据类型从 Fortran 传递到 C++ [重复]

    这个问题在这里已经有答案了 我在 Fortran 中有一个结构化类型 其中包含大量数据 包括指针 real 8 指针数据类型 我正在为某些 Fortran 例程开发 C API 我需要在对 Fortran 例程的调用之间保留该结构的内容 我
  • CMake:Fortran 模块和编译顺序

    我有一个大型 Fortran 程序 其中包含许多目录 每个目录都在伪库中单独编译 但仍然存在相互依赖的混乱 因此最终所有伪库都组合在一个可用的库中 我想使用 Fortran 模块 但它非常脆弱 因为我不能依赖自动依赖项检查 并且根据顺序编译
  • 将静态库合并为单个

    如何将静态库合并为一个 我确实有三个静态库 libSignatureLibary armv6 a libSignatureLibary armv7 a 和 libSignatureLibary i368 a 现在我想将这三个文件合并到一个库

随机推荐

  • 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