在Vc++里嵌入fortran的问题

linguanyu315 2004-08-31 03:26:00
1.在vc++里能不能调用fortran(*.f)的若干变量和函数?怎么调用?fortran函数是否要做成dll或者lib文件?
2.被调用的fortran函数是把它复制到 VC++ 的cpp文件里,还是写在fortran(*.f)程序里?如果写在*.f里,那这个文件是不是要放在VC的工程里?
3.fortran函数是否要做成dll或者lib文件?如果是,是不是要用fortran的编译器做dll文件?还是VC++就可以做?
...全文
281 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
柯本 2004-09-08
  • 打赏
  • 举报
回复
///邮件已回,有问题再mail给我
你的第一个问题可以解决:
(我用的是gcc 是dev-cpp)
1.将dev-cpp\lib\libg2c.a 拷贝为libg2c.lib加入项目
2.将\Dev-Cpp\lib\gcc-lib\mingw32\3.2\libgcc.a 拷贝为libgcc.lib加入项目
编译就能通过,我用output函数试了一下,没问题
(加了一个button)
extern "C" output_();
void CTest_elfeDlg::OnButton1()
{
// TODO: Add your control notification handler code here

output_();
}

附件2我是将powerstation的console.lib libf.lib PORTLIB.LIB加入项目,编译运行通过,
虽然有警告,但没问题(可能是libcd与上述库的某些函数有重复,但都是microsoft的东西,不会有问题的)
VC中引入gcc,如果是编译c/c++程序且不含系统函数,应该没问题,但含系统函数,就要在vc项目中加
入gcc的库(具体的库要用库查看工具如gcc的objdump),如果是fortan源程序,gcc会再调g77,但VC的项目
PATH不会找到g77的路径,所以会错.要解决估计会很繁,所以最好用gcc在命令行先编成.obj,再加入VC
用fl32编译过再加入gcc可能更复杂,我没试过
linguanyu315 2004-09-08
  • 打赏
  • 举报
回复
发信了,不知道,有没有收到?
柯本 2004-09-06
  • 打赏
  • 举报
回复
最简单的解决方法:
1.用gcc将你的.f编译,用gcc的命令行方式,生成.obj,如
gcc -o test.obj -c test.f
2.将你test.obj加入你的VC工程,应该没问题
3.fl32与g77在语法定义上是有差别的(fortran的移植性不如C)
4.gcc生成的函数名在obj中全部会变小写,且前后都会有_,而vc的只会在前面加_
所以可能要在C程序调用时变小写,后面加_
5.再有问题将你的程序发给我:keiy2k@163.com
linguanyu315 2004-09-06
  • 打赏
  • 举报
回复
谢谢keiy(),你知道的很多嘛。越来越崇拜你了。为了实现编译,我下了很多编译器。
1.经过多次试验,fl32(powerstation)可以加到custom build里, output:$(InputName).obj。虽然运行成功,但是有一个警告:
Linking...
LINK : warning LNK4098: defaultlib "libc.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
UseCommain.exe - 0 error(s), 1 warning(s)
你是否也出现过这样的警告。因为我在另一种方法(在命令行先把*.f程序编译成*.o,VC再用)也出现类似的警告
Linking...
LINK : warning LNK4098: defaultlib "LIBCD" conflicts with use of other libs; use /NODEFAULTLIB:library
,然后在把程序改到对话窗工程里就变成两个错误,一个警告了。
是不是,他们的库文件有些冲突?你是否也出现过这样的警告,是否回影响日后的工作,如何解决的?


2.虽然fl32成功,但是我在引入其他commands(例如,gcc,g77)的时候却都出错。例如引入gcc 用库D:\Dev-Cpp\bin
gcc: installation problem, cannot exec `f771': No such file or directory
Error executing c:\windows\system32\cmd.exe.
wincom.exe - 1 error(s), 0 warning(s)
我找了一下,bin里面确实没有f771,我找了一个贴过去,但是还是一样的错误。

又如,引入g77 用fortran powerstation的库 问题一样
Performing Custom Build Step on .\UseCom.f
g77: installation problem, cannot exec `f771': No such file or directory
Error executing c:\windows\system32\cmd.exe.
wincom.exe - 1 error(s), 0 warning(s)

引入g77别人给的gcc-2.95.2库 ,也有错误,
Performing Custom Build Step on .\UseCom.f
g77: installation problem, cannot exec `as': No such file or directory
Error executing c:\windows\system32\cmd.exe.
wincom.exe - 1 error(s), 0 warning(s)
问题类似,但是是“as”,我查了一下,库里是有的“as”

我都把对应的bin,lib,有的甚至include目录都加到VC的Directories里了。这几个错误看来类似。你可知道怎样处理啊?很想知道,你以前是引入什么编译命令的?

3.关键别人给我的fortran 77程序是原来是用g77编译的,编译都过,(用gcc也编译通过),我用fl32编译就报错,所以我想把g77引入VC,而不是fl32。因此第二个问题比较重要。fortran我不懂,是不是同样的程序,用不同的编译器(例如fl32,和g77),结果会不同?
柯本 2004-09-02
  • 打赏
  • 举报
回复
1.ftp://210.77.19.251/pub/tools/fortran4.0.exe
2.gcc
input:e:\dev-cpp\bin\gcc -c $(InputName).f
output:$(InputName).o
3.fl32我家的机器上才有,没法试
柯本 2004-09-02
  • 打赏
  • 举报
回复
1. 你必须将powerstation的lib目录加用vc的项目设置中(或在名命令行加入 /link libpath:你的powerstation的lib目录或在lib环境变量中加入)
2.设.f的custom
3.不好意思,是commands不是input,要加名字
D:\c++\ELFE_FE\gcc-2.95.2\bin\gcc -c $(InputName).f
linguanyu315 2004-09-02
  • 打赏
  • 举报
回复
1.下到了,里面就有fl32。太谢谢了。现在我用fl32试了你以前给的程序(usecommain.cpp usecom.f)。在命令行可以运行,我用fl32,gcc分步运行。但是我不能用cl(VC++ 6),他报缺少库文件(例如console.lib)。我看了VC库里是没有,从别的地方贴了一个过去,它有报缺另一个。
2.设置custom build是给整个项目设,还是指定Project中的某个*.f,*.cpp设置啊?我现在设的是*.f的custom build。
3.gcc
input:e:\dev-cpp\bin\gcc -c $(InputName).f
output:$(InputName).o
在VC++ 6.0 里的custom build设置页面只有commands,和outputs的筐啊,没有input,但是在最上面有input file,但是不能改动,就是当前的fortran程序名(例如.\usecom.f)。下面是描述Description,我添了$(InputName).f;在commands里我添D:\c++\ELFE_FE\gcc-2.95.2\bin\gcc -c;在outputs里,我填$(InputName).o,是不是这样填写啊?但是我运行报错。UseCom.f gcc:no input files Error executing c:\windows\system32\cmd.exe

具体你讲的input是只哪里,output是不是就是custom build中outputs筐?救我啊。

linguanyu315 2004-09-01
  • 打赏
  • 举报
回复
谢谢keiy()。但是到哪里去下编译器啊?(fl32)没搜到,你能给个连接嘛?在commands里就设fl32就行了嘛?没有什么(TargetName)$(BIN)$(TargetName)之类的东西吗?outputs写什么?我用gcc -o 试了不行诶。能否告诉我,commands里面具体怎么写,针对fl32,和gcc。
柯本 2004-09-01
  • 打赏
  • 举报
回复
gcc 可以编译通过是因为有f77.exe(fortran编译器,dev-cpp带的)
vc++ 本身没有fortran的编译器,所以一定要下载安装一个
vc直接build是可能的,只要在VC的设定,将文件加入项目,然后右键,设custom build的commands为fl32,也可用fl32先将.f编译成.obj然后加入项目
linguanyu315 2004-08-31
  • 打赏
  • 举报
回复
谢谢 keiy(),照你说的,我现在在命令行下gcc -o h cmain.c forsubs.for 是可以通过编译了。但是我的*.cpp 和*.f还是不能. 是不是一定要fl32啊?但是我没有fl32和powerstation。
还有一个问题就是,我是用VC++做界面,调用fortran程序(*.f),能不能不用命令行的方式分开编译,而在VC中直接进行Building,要不我的界面怎么做啊。望指教。
  • 打赏
  • 举报
回复
C/C++ 可以和 fortran 联编, fortran 使用的好像是 pascal 调用约定.用DLL和lib都可以
柯本 2004-08-31
  • 打赏
  • 举报
回复
我以前回答过的
http://community.csdn.net/Expert/topic/2863/2863500.xml?temp=.1775019
linguanyu315 2004-08-31
  • 打赏
  • 举报
回复
能不能给给点资料或者实例.我的email:linguanyu315@163.com
linguanyu315 2004-08-31
  • 打赏
  • 举报
回复
DiabloWalkOnTheEarth(毁灭小符 (Annihilus)(99)(3502)) ,能否写的具体点,还是不太明白。是不是必须做成dll或者lib,不能简单的就把fortran 77的程序段写进去?“ pascal 调用约定”--能否讲的详细点。谢谢。

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧