首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Visual (f2c)中使用静态库的未解析外部元素

在Visual (f2c)中使用静态库的未解析外部元素
EN

Stack Overflow用户
提问于 2014-07-11 14:47:12
回答 1查看 3.3K关注 0票数 1

我已经成功地使用f2c.exe将一些Fortran *.f文件转换为*.c文件。我确保了每个C文件中的#include "f2c.h" 存在,并在MS VS2008:Properties -> C/C++ -> General -> Additional Include Directories中添加了包含该头文件的目录

问题首先是未解决的外部符号错误,这些错误报告了源文件中存在的所有f2c IO和数学函数:s_rsue, e_rsue, s_rsfe, do_uio, f_close, do_fio, do_lio, f_open, s_stop, pow, pow_ri, sqrt, log, exp, tanh, cos, acos等。

我读到了这里,我必须首先由下载中 libf2c生成静态库文件vcf2c.lib。因此,我使用nmake 在VS2008中运行makefile.vc并生成vcf2c.lib,然后将其复制到项目目录中并添加到Configuration Properties -> Linker -> Input -> Additional Dependencies下,但我是,获得了与以前相同的未解决的外部符号。

我是否正确地构建了这个库,以便Visual能够识别其中的函数?我在这里错过了什么?添加此库似乎具有效应。谢谢你的帮助。

错误的例子:

代码语言:javascript
复制
error LNK2019: unresolved external symbol "long __cdecl e_rsue(void)" (?e_rsue@@YAJXZ) referenced in function _main
error LNK2019: unresolved external symbol "long __cdecl do_uio(long *,char *,long)" (?do_uio@@YAJPAJPADJ@Z) referenced in function _main
error LNK2019: unresolved external symbol "long __cdecl s_rsue(struct cilist *)" (?s_rsue@@YAJPAUcilist@@@Z) referenced in function _main
error LNK2019: unresolved external symbol "double __cdecl log(double)" (?log@@YANN@Z) referenced in function _main
error LNK2019: unresolved external symbol "double __cdecl sqrt(double)" (?sqrt@@YANN@Z) referenced in function "int __cdecl calcfl_(void)" (?calcfl_@@YAHXZ)
error LNK2019: unresolved external symbol "double __cdecl cos(double)" (?cos@@YANN@Z) referenced in function "int __cdecl waveno_(float *,float *)" (?waveno_@@YAHPAM0@Z)

编辑:我一直在试图诊断库文件本身中的任何问题。我甚至尝试下载一个由其他人编译的版本,但仍然没有解决外部问题。下面是运行垃圾箱的结果:

dumpbin /exports vcf2c.lib

代码语言:javascript
复制
Dump of file vcf2c.lib

File Type: LIBRARY
  Summary
    18A0 .bss
     246 .data
    1110 .debug$F
    513C .debug$S
    1C17 .drectve
     B73 .rdata
    A5BD .text

不过,我不知道那是什么意思。当我使用/ALL标志运行它时,我可以在其中看到所需的函数名,但同样,我不确定如何确定它是否正确。源代码函数和库的函数之间会有某种不匹配吗?16位对32位,C对C++生成文件选项?

EN

回答 1

Stack Overflow用户

发布于 2014-11-10 06:43:22

这一定是呼叫会议的问题所在!只需确保用相同的调用约定( (_cdecl或_stdcall) )导出函数,否则使用导出函数使用的相同调用约定。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24700505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档