Fortran 符号不在加载表中(无法在 R 中调用加载的符号)

2023-12-01

我正在尝试使用 Absoft Pro Fortran 13.0.3(64 位)构建 Fortran DLL,以便在 Windows 7 64 位上的 R 中使用。

这是我的文件 mycalc.f (这是一个愚蠢的示例,只是为了测试功能):

subroutine mycalcf(a,b,c)
real*8 a,b,c
dll_export mycalcf
c=a+b*b
end

该声明dll_export不是标准的,但在某些 Fortran 编译器中可以找到(AFAIK 在 Lahey 和 CVF 中也可以找到,而 Intel Fortran 有一个编译器指令)。它只是告诉编译器要导出哪些符号。

我编译成功:af90 -m64 -dll -YDLL_NAMES=LCS mycalc.f -o mycalc.dll

选项-YDLL_NAMES=LCS告诉编译器构建一个带有小写符号的库,这对于 R 来说似乎更好。

如果我跑dumpbin /exports mycalc.dll,我可以在导出的符号中找到 mycalcf,小写,前后没有任何下划线。

现在,在 R(64 位版本)中,可以执行以下操作:

dyn.load("mycalc.dll")
is.loaded("mycalcf")
.Fortran("mycalcf", a=4, b=5, c=0)

正如预期的那样,返回时我得到 c=29。

BUT,如果我重新启动 R,以下内容将不起作用(注意我只删除了is.loaded test):

dyn.load("mycalc.dll")
.Fortran("mycalcf", a=4, b=5, c=0)

我收到错误:Fortran symbol name "mycalcf" not in load table.

现在我的问题是:为什么这个测试如此重要?


作为比较,当我尝试使用 gfortran 而不是 Absoft 进行相同操作时,我完全没有问题。我编译:gfortran -m64 -shared -o mycalc2.dll mycalc.f(注释掉 dll_export 语句之后,gfortran 不需要该语句,甚至也无法识别该语句)。 然后在R中:

dyn.load("mycalc2.dll")
.Fortran("mycalcf", a=4, b=5, c=0)

我得到 c=29,没有错误。

现在,我怀疑 gcc 链接器所做的某些事情不是由 Absoft 链接器(实际上是 Microsoft 的 link.exe)自动完成的。但我不知道它会是什么。

欢迎任何想法!


好的,Vladimir F 提出了一个很好的问题后的解决方案(请参阅评论)。 实际上,必须在符号名称后添加下划线。由于无法通过编译器选项来完成此操作,因此需要CDEC$指令(参见HP or Intel文档)。

这里很简单:

      subroutine mycalcf(a,b,c)
CDEC$ attributes alias:'mycalcf_' :: mycalcf
      real*8 a,b,c
      dll_export mycalcf
      c=a+b*b
      end

第二个解决方案,来自Absoft论坛: 其实我从一开始就错了。与我的想法相反,不需要使用 dll_export 语句,它甚至引入了问题:没有它,编译器会附加下划线。默认情况下会导出所有符号,如 gfortran 中一样。所以正确的代码很简单:

      subroutine mycalcf(a,b,c)
      real*8 a,b,c
      c=a+b*b
      end

甚至不需要任何选项来获取小写符号,这也是默认值。


然而,仍然存在一个问题:R 函数是否有效?.Fortran总是添加下划线(有没有办法告诉它不要这样做?),如果总是添加,为什么调用在is.loaded是提前调用的吗? R 似乎在这里做了一些奇怪的事情。


None

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

Fortran 符号不在加载表中(无法在 R 中调用加载的符号) 的相关文章

  • 将命名参数列表传递给函数?

    我想编写一个小函数来从适当的分布生成样本 例如 makeSample lt function n dist params values lt makeSample 100 unif list min 0 max 10 values lt m
  • 基于服务器中的条件逻辑呈现闪亮的用户输入

    我正在尝试设置一个闪亮的导航栏面板页面 其中用户控制我根据一组单选按钮中所做的初始选择来显示更改 我直接在 ui 中渲染单选按钮 然后在 Server r 中的 观察到的 逻辑控制结构内构建条件控件 弹出错误是因为我的初始 if 语句计算结
  • R::bigmemory - 如何创建角色big.matrix?

    我尝试使用bigmemory封装在R我一开始就陷入困境 我愿意 temp lt matrix paste a 1 10 5 2 并得到一个字符矩阵 没关系 但后来我尝试 x lt as big matrix temp type char 我
  • ggplot2可以在一个图例中分别控制点大小和线大小(线宽)吗?

    一个使用的例子ggplot2绘制数据点组和连接每组均值的线 并使用相同的映射aes for shape并为linetype p lt ggplot mtcars aes gear mpg shape factor cyl linetype
  • 将 Instagram/youtube 嵌入 Shiny R 应用程序

    我想通过点击图表来播放 Instagram 或 Youtube 视频 例如显示异常值等 到目前为止 明确告诉 Shiny 视频内容是有效的 require shiny require ggplot2 data df lt data fram
  • 如何对同一列上的数据帧列表中的所有数据帧进行排序?

    我有一个数据框列表dataframes list 举个例子 我把dput dataframes list 在底部 我想对列列表中的所有数据框进行排序enrichment 我可以对一个数据框进行排序 first dataframe lt da
  • 如何在R中删除重复项

    我有一个非常大的数据集 如下所示 df lt data frame school c a a a b b c c c year c 3 3 1 4 2 4 3 1 GPA c 4 4 4 3 3 3 2 2 school year GPA
  • 将年月格式转换为 POSIXct [重复]

    这个问题在这里已经有答案了 我有一些年月形式的数据 我想将其格式化以用于绘图ggplot date lt c 2016 03 2016 04 2016 05 2016 06 2016 07 2016 08 2016 09 2016 10 2
  • 如何在 ggplot 中保持配色方案,同时删除每个图中未使用的级别?

    我想比较一个图中的数据的一些子组和另一图中的一些其他子组 如果我绘制一个图 其中绘制了所有子组 那么这个数字将是巨大的 并且每个单独的比较都会变得困难 我认为如果给定的子组在所有图中都具有相同的颜色 这对读者来说会更有意义 这是我尝试过的两
  • 纵向序列数据的三次样条方法?

    我有一个串行数据 格式如下 time milk Animal ID 30 25 6 1 31 27 2 1 32 24 4 1 33 17 4 1 34 33 6 1 35 25 4 1 33 29 4 2 34 25 4 2 35 24
  • 多功能测试仪替代 system.time

    我已经看到 我认为是这样 使用了类似于 system time 的函数 它可以同时评估多个函数的时间并输出一个输出 我不记得它是什么 并且用我正在使用的术语进行互联网搜索并没有得到我想要的响应 有人知道我正在谈论的功能的名称 位置吗 你想要
  • 通过间接引用列来修改数据框中的某些值

    我正在整理一些数据 我们将失败的数据分类到垃圾箱中 并按批次计算每个分类箱的有限产量 我有一个描述排序箱的元表 这些行按升序测试顺序排列 一些排序标签带有非语法名称 sort tbl lt tibble tribble weight lab
  • 时间戳半小时窗口内字段的平均值

    我的数据框有列名Timestamp es看起来像 Timestamp es 2015 04 01 09 07 42 31 2015 04 01 09 08 01 29 5 2015 04 01 09 15 03 18 5 2015 04 0
  • 如何使用 usmap 标记数字而不是名称?

    我知道 usmap 有一个选项label in plot usmap 我想标记一些数字 而不是状态名称 我想 usmap 中应该有与州质心坐标相关的数据 但我不知道如何找到它 如果我能得到 坐标然后我可以用它来标记数字geom text 这
  • ctypes 加载 dll 时没有错误消息,但什么也没发生

    我尝试在ctypes中使用windll LoadLibrary将dll文件导入python 尽管没有任何错误消息 但头文件中列出的函数似乎都没有成功加载 我想知道是dll文件有问题 还是我错误地使用了windll LoadLibrary方法
  • 在 R 中绘制 Likert 变量的堆积条形图

    假设我有一个如下所示的数据框 P Q1 Q2 1 1 4 1 2 2 3 4 3 1 1 4 其中的列告诉我哪个人相应地回答了问题 q1 q2 中的哪一个 这些问题需要按照 4 分李克特量表进行回答 例如 批准 表示 1 稍微批准 表示 2
  • 在 R 中创建虚拟变量,排除某些情况为 NA

    我的数据看起来像这样 V1 V2 A 0 B 1 C 2 D 3 E 4 F 5 G 9 我想创建一个虚拟变量R where 0 1 1 2 3 4 and NA 0 5 9 应该很简单 有人可以帮忙吗 我们可以转换V2 into a fa
  • 在 R 中使用 lapply 绘制多个数据帧

    我正在尝试使用 lapply 函数绘制多个数据帧 每个数据帧一个图 但是尽管有关此主题的所有帖子我都找不到答案 因为我不断收到错误 图的输出列表为空 我的数据结构如下 df1 lt mtcars gt group by cyl gt tal
  • 只读取选定的列

    谁能告诉我如何仅读取下面每年数据的前 6 个月 7 列 例如使用read table Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2009 41 27 25 31 31 39 2
  • ddply 和aggregate 之间的区别

    有人可以通过以下示例帮助我了解聚合和 ddply 之间的区别 数据框 mydat lt data frame first rpois 10 10 second rpois 10 10 third rpois 10 10 group c re

随机推荐

  • R:从数据中获取符合条件的行?

    我有一个包含大量数据的 CSV 文件 如下所示 gt test csv lt read csv Desktop stats csv gt test csv m lvl a b c a pct b pct c pct d pct 1 5435
  • 播放内存流中的视频

    到目前为止找不到任何令人满意的答案 我正在开发一个 C WinForms NET3 5 应用程序 该应用程序需要从数据库 BLOB 加载视频文件并在应用程序窗口内播放 数据库是本地文件 不涉及服务器 我不认为将文件保存到硬盘驱动器是一个好的
  • CodeigniterWhere 子句

    不知怎的 对我来说构建这样的查询有点困难 给我所有链接名称不为空的导航条目 query this gt db gt get where navigation array linkname NULL 给我错误 where 子句 中的未知列 0
  • 在ArrayBlockingQueue中,为什么将final成员字段复制到局部final变量中?

    In ArrayBlockingQueue 所有需要锁的方法将其复制到本地final调用前的变量lock public boolean offer E e if e null throw new NullPointerException f
  • 在 shell 脚本中使用expect

    我需要传递两个参数给expect 第一个是要执行的命令 第二个是密码 这是我的期望 sh usr bin expect spawn lrange argv 0 0 expect password send lindex argv 1 int
  • OpenSSL 内存泄漏?

    我使用以下代码来检查签名 为了简单起见 公钥 消息和签名在中初始化main include
  • 在启动屏幕期间加载 MainActivity

    我目前有一个splashScreenActivity这需要用户按button去MainActivity 是否可以加载全部内容MainActivity WITHOUT MainActivity的 UI 出现在顶部splashScreenAct
  • 防止“点击”事件多次触发+淡入淡出问题

    早安各位 对我正在制作的简单 jQuery 画廊有疑问 它允许用户通过一些按钮循环浏览图像集合 同时在计时器上轮换这些图像 我的问题是 用户可以多次单击该按钮 这会将动画的淡入淡出排队并一遍又一遍地重复 例如用户点击按钮 5 次 gt 同一
  • 在 mac 上使用 gdb 在 eclipse 中调试 - 无法执行 MI 命令:-exec-run

    我有 Eclipse Kepler 和简单的 HelloWorld C 程序 我想在其中学习如何调试 C 程序 单击调试按钮时 我收到以下错误消息 最终启动顺序错误 执行MI命令失败 exec 运行 来自调试器后端的错误消息 无法找到进程
  • 需要 C# 构造函数语法解释

    有人可以向我解释以下构造函数语法吗 我以前没有遇到过它 并在同事代码中注意到它 public Service this Service DoStuff DoMoreStuff 它链接到同一个类中的另一个构造函数 基本上任何构造函数都可以ei
  • WP7 中的 HttpWebRequest 超时不适用于计时器

    由于 WP7 HttpWebRequest 不支持超时 因此我使用计时器来实现该功能 下面是一个例子 我从 UI 表单调 用 GetConnection 但在计时器时间结束之前 ReadCallback 永远不会执行 一旦计时器停止 就会触
  • PHP中的动态静态方法调用?

    请有 PHP 经验的人帮忙解决以下问题 在我的代码中的某个地方 我调用了非实例化类中的公共静态方法 result myClassName myFunctionName 但是 我希望有许多这样的类 并根据用户的语言动态确定正确的类名 换句话说
  • UISearchDisplayController 搜索多个数组

    目前 我正在使用表示名称 ID 等的多个数组的内容填充我的 tableviewcells 当我开始使用搜索显示控制器时 我的问题就出现了 我有一个数组 其中包含名称列表 ID 列表 条形码列表和别名列表 当用户在搜索栏中输入内容时 我需要能
  • Qt:像 Eclipse 一样拖放小部件以实现任意布局(拆分)

    我知道停靠小部件 拆分器等 我仍然想知道是否可以像 Eclipse 中那样创建灵活的拆分系统 当任何小部件根据拖动过程中光标的位置保持垂直或水平拆分时 例如 第一个小部件A占据了整个QMainWindow 第二个B首先在选项卡中打开 所以它
  • 这些数组有什么区别?

    var foo var bar new Array var another 另外 是否可以添加到foo像这样 foo obj new Date var foo foo是一个对象字面量 var bar new Array bar是一个通过初始
  • Yii2 中按字段排序

    我遇到了这个问题 但没有找到 yii Instrument 的任何解决方案 有人知道如何解决这个问题吗 最终 我使用了这个糟糕的代码 params foreach recipeIds as i gt recipeId params id i
  • 打印出 linq 查询的结果

    我正在使用 asp net core 实体框架 我使用 linq 组合三个表 User Products 和 User Had Products 我的查询似乎工作正常 我遇到的问题是打印出查询结果 我可以打印出整个对象 但无法使用点表示法打
  • Direct3D11:翻转 ID3D11Texture2D

    我执行 Direct3D 后台缓冲区的捕获 当我下载像素时 图像帧沿其垂直轴翻转 复制资源或创建目标时是否可以 告诉 D3D 翻转帧ID3D11Texture2D 我是这样做的 我将帧缓冲区复制到其中的纹理是这样创建的 D3D11 TEXT
  • JSON序列化时如何本地化?

    我已经奋斗了几个小时了 但没有好的结果 我正在尝试使用 NET JSON 序列化器将 JSON 从 UI 来回转换为对象 小数会出现问题 因为我的文化标准使用 作为小数分隔符而不是 我尝试过实现自定义转换器 请参阅this问题 没有好的结果
  • Fortran 符号不在加载表中(无法在 R 中调用加载的符号)

    我正在尝试使用 Absoft Pro Fortran 13 0 3 64 位 构建 Fortran DLL 以便在 Windows 7 64 位上的 R 中使用 这是我的文件 mycalc f 这是一个愚蠢的示例 只是为了测试功能 subr