【问题标题】:Error in linking when converting Fortran to C (using f2c)将 Fortran 转换为 C 时出现链接错误(使用 f2c)
【发布时间】:2014-05-13 20:08:17
【问题描述】:

我正在尝试构建一个主要是 C 语言但有一些 Fortran 子例程的项目。代码很旧,我正试图让它在现代机器上运行。我的主函数调用了一个外部函数

extern void __stdcall mainlhs(void);

函数是用Fortan编写的子程序

subroutine mainlhs

我想使用 f2c 转换 Fortran 代码(包含这个和其他子例程)并将结果放入我的项目中。

f2c 确实会转换代码,并且生成的 C 代码会编译。当我尝试构建项目时,有几个链接错误。

Error   35  error LNK2019: unresolved external symbol _e_wsle referenced in function _mainlhs_  C:\Users\giazlas\Documents\Socrates Support\projects\lhsforc\lhsforc\UNCER.obj
Error   36  error LNK2019: unresolved external symbol _s_wsle referenced in function _mainlhs_  C:\Users\giazlas\Documents\Socrates Support\projects\lhsforc\lhsforc\UNCER.obj
Error   37  error LNK2019: unresolved external symbol _f_clos referenced in function _mainlhs_  C:\Users\giazlas\Documents\Socrates Support\projects\lhsforc\lhsforc\UNCER.obj
Error   38  error LNK2019: unresolved external symbol _e_rsle referenced in function _mainlhs_  C:\Users\giazlas\Documents\Socrates Support\projects\lhsforc\lhsforc\UNCER.obj
Error   39  error LNK2019: unresolved external symbol _do_lio referenced in function _mainlhs_  C:\Users\giazlas\Documents\Socrates Support\projects\lhsforc\lhsforc\UNCER.obj
Error   40  error LNK2019: unresolved external symbol _s_rsle referenced in function _mainlhs_  C:\Users\giazlas\Documents\Socrates Support\projects\lhsforc\lhsforc\UNCER.obj
Error   41  error LNK2019: unresolved external symbol _f_open referenced in function _mainlhs_  C:\Users\giazlas\Documents\Socrates Support\projects\lhsforc\lhsforc\UNCER.obj
Error   42  error LNK2019: unresolved external symbol _s_stop referenced in function _chlsky_   C:\Users\giazlas\Documents\Socrates Support\projects\lhsforc\lhsforc\UNCER.obj
Error   43  error LNK2019: unresolved external symbol _e_wsfe referenced in function _gaminv_   C:\Users\giazlas\Documents\Socrates Support\projects\lhsforc\lhsforc\UNCER.obj
Error   44  error LNK2019: unresolved external symbol _do_fio referenced in function _gaminv_   C:\Users\giazlas\Documents\Socrates Support\projects\lhsforc\lhsforc\UNCER.obj
Error   45  error LNK2019: unresolved external symbol _s_wsfe referenced in function _gaminv_   C:\Users\giazlas\Documents\Socrates Support\projects\lhsforc\lhsforc\UNCER.obj
Error   46  error LNK2019: unresolved external symbol _pow_dd referenced in function _gamcdf_   C:\Users\giazlas\Documents\Socrates Support\projects\lhsforc\lhsforc\UNCER.obj
Error   47  error LNK2019: unresolved external symbol _pow_ri referenced in function _moment_   C:\Users\giazlas\Documents\Socrates Support\projects\lhsforc\lhsforc\UNCER.obj
Error   48  error LNK2019: unresolved external symbol _s_paus referenced in function _betpdf_   C:\Users\giazlas\Documents\Socrates Support\projects\lhsforc\lhsforc\UNCER.obj

这些函数不会出现在原始 Fortran 代码中,也不会出现在其他任何地方。我只在 netlib 的 f2c 源中找到了它们的引用

感谢您的帮助

【问题讨论】:

    标签: visual-studio-2010 visual-c++ linker fortran f2c


    【解决方案1】:

    我认为您还需要链接 libf2c 中的函数,该函数可从 Netlib 获得,如 http://www.netlib.org/f2c/README 所述。

    【讨论】:

    • 谢谢,成功了。但是现在 libf2c 中的一个文件产生了链接错误,我可以在 libf2c 的任何地方找到该函数。 s_paus.c 调用了一个名为 pause() 的函数,而这个函数在任何地方都找不到。错误 85 错误 LNK2019:未解析的外部符号 _pause 在函数 _s_paus C:\Users\giazlas\Documents\Socrates Support\projects\lhsforc\lhsforc\s_paus.obj 中引用
    • 找到要暂停的调用,看看是否可以删除它们。通常情况就是这样。
    • 或者写你自己的暂停。
    • 我在VS2008中使用nmake从libf2c运行makefile.vc生成vcf2c.lib。我将该文件复制到我的项目目录中,然后将其添加到Configuration Properties/Linker/Input/Additional Dependencies 下,但是对于在我的代码中调用的所有 IO 和数学函数,我仍然得到未解析的外部符号:s_rsue, e_rsue, do_uio, f_close, do_lio, f_open, pow, sqrt, log, exp, cos 等。我做了什么错了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 2016-01-04
    • 2011-05-17
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多