- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从未用 Fortran 编写过代码。因此,我有一些与 Fortran 相关的工作,其中我将该代码转换为 C。但是当我运行 C 代码时,它给了我以下错误:
/usr/lib/gcc/i686-linux-gnu/5/../../../i386-linux-gnu/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
/tmp/ccNX2LeT.o: In function `MAIN__':
sinai_static.c:(.text+0x58): undefined reference to `f_open'
sinai_static.c:(.text+0x2ca): undefined reference to `sqrt'
sinai_static.c:(.text+0x400): undefined reference to `sqrt'
sinai_static.c:(.text+0x487): undefined reference to `sqrt'
sinai_static.c:(.text+0x6f1): undefined reference to `atan2'
sinai_static.c:(.text+0x71b): undefined reference to `atan2'
sinai_static.c:(.text+0x777): undefined reference to `sqrt'
sinai_static.c:(.text+0x795): undefined reference to `cos'
sinai_static.c:(.text+0x7bb): undefined reference to `sin'
sinai_static.c:(.text+0x8ef): undefined reference to `s_wsle'
sinai_static.c:(.text+0x908): undefined reference to `do_lio'
sinai_static.c:(.text+0x921): undefined reference to `do_lio'
sinai_static.c:(.text+0x93a): undefined reference to `do_lio'
sinai_static.c:(.text+0x953): undefined reference to `do_lio'
sinai_static.c:(.text+0x96c): undefined reference to `do_lio'
sinai_static.c:(.text+0x974): undefined reference to `e_wsle'
sinai_static.c:(.text+0x9b5): undefined reference to `s_wsle'
sinai_static.c:(.text+0x9ce): undefined reference to `do_lio'
sinai_static.c:(.text+0x9fc): undefined reference to `do_lio'
sinai_static.c:(.text+0xa2e): undefined reference to `do_lio'
sinai_static.c:(.text+0xa60): undefined reference to `do_lio'
sinai_static.c:(.text+0xa92): undefined reference to `do_lio'
sinai_static.c:(.text+0xa9a): undefined reference to `e_wsle'
collect2: error: ld returned 1 exit status
旧的 Fortran 代码使用 ran0.f 中的外部方法。我认为问题在于打开文件,因为翻译后的代码使用 f_open(&o_1) ,它给出了错误。但我不知道如何解决。我附上C代码供引用。
#include "f2c.h"
/* Table of constant values */
static integer c__3 = 3;
static integer c__1 = 1;
static integer c__5 = 5;
/* Main program */ int MAIN__(void)
{
/* System generated locals */
integer i__1;
doublereal d__1, d__2, d__3, d__4;
olist o__1;
/* Builtin functions */
integer f_open(olist *);
double sqrt(doublereal), atan2(doublereal, doublereal), cos(doublereal),
sin(doublereal);
integer s_wsle(cilist *), do_lio(integer *, integer *, char *, ftnlen),
e_wsle(void);
/* Local variables */
static doublereal a, c__, l, m, r__, e0, u0, u1, w0, x0, x1, z0, z1, x2,
z2, w1, u2, w2, t2;
static integer ii;
static doublereal en[500000], pi;
static integer it;
static doublereal ts, total_time__, vel;
extern doublereal ran0_(integer *);
static doublereal enke[500000];
static integer bhit;
static doublereal enpe[500000];
static integer idum, iter, itmin;
static doublereal ttemp, xtemp, ztemp, tstep;
static integer total_itcount__;
static doublereal maxvel, tanglec, tanglei, tangler;
static integer t_write__;
/* Fortran I/O blocks */
static cilist io___43 = { 0, 6, 0, 0, 0 };
static cilist io___44 = { 0, 18, 0, 0, 0 };
o__1.oerr = 0;
o__1.ounit = 18;
o__1.ofnmlen = 24;
o__1.ofnm = "data/sinai_static_r7.txt";
o__1.orl = 0;
o__1.osta = "unknown";
o__1.oacc = 0;
o__1.ofm = 0;
o__1.oblnk = 0;
f_open(&o__1);
pi = 3.14159265358979f;
idum = 120;
/* cc POLYGON PARAMETERS */
r__ = .7f;
l = 4.f;
/* cc INITIAL CONDITIONS */
x0 = .3f;
z0 = .33f;
u0 = 100.f / sqrt(2.f);
w0 = u0 * .1f;
/* Computing 2nd power */
d__1 = u0;
/* Computing 2nd power */
d__2 = w0;
e0 = d__1 * d__1 + d__2 * d__2;
/* write(*,*) "r=",r */
/* write(*,*) "L=",L */
tstep = l * .5f / u0;
itmin = 500000;
total_itcount__ = 0;
for (iter = 1; iter <= 500000; ++iter) {
en[499999] = 0.f;
enke[499999] = 0.f;
enpe[499999] = 0.f;
}
for (ii = 1; ii <= 1000; ++ii) {
/* z0=0.3*(1.0+PI*(iI-1)/NI) */
x0 = ran0_(&idum);
if (x0 < .5f) {
x0 = -(r__ + x0 * 2.f * (l - r__));
} else {
x0 = r__ + x0 * 2.f * (l - r__);
}
z0 = ran0_(&idum);
if (z0 < .5f) {
z0 = -(r__ + z0 * 2.f * (l - r__ - a));
} else {
z0 = r__ + z0 * 2.f * (l - r__);
}
/* write(*,*) iI,x0,z0 */
x2 = x0;
z2 = z0;
u2 = u0;
w2 = w0;
/* Computing 2nd power */
d__1 = u2;
/* Computing 2nd power */
d__2 = w2;
vel = sqrt(d__1 * d__1 + d__2 * d__2);
bhit = 0;
total_time__ = 0.f;
maxvel = 0.f;
it = 0;
t_write__ = 0;
for (iter = 1; iter <= 500000; ++iter) {
/* if((mod(iter,100000)).eq.0.0) write(*,*) iter */
x1 = x2;
z1 = z2;
u1 = u2;
w1 = w2;
ts = -x1 / u1;
m = w1 / u1;
c__ = z1 + w1 * ts;
if (u1 > 0.f) {
/* Computing 2nd power */
d__1 = r__;
/* Computing 2nd power */
d__2 = m;
/* Computing 2nd power */
d__3 = c__;
/* Computing 2nd power */
d__4 = m;
x2 = (-m * c__ - sqrt(d__1 * d__1 * (d__2 * d__2 + 1) - d__3 *
d__3)) / (d__4 * d__4 + 1);
} else {
/* Computing 2nd power */
d__1 = r__;
/* Computing 2nd power */
d__2 = m;
/* Computing 2nd power */
d__3 = c__;
/* Computing 2nd power */
d__4 = m;
x2 = (-m * c__ + sqrt(d__1 * d__1 * (d__2 * d__2 + 1) - d__3 *
d__3)) / (d__4 * d__4 + 1);
}
t2 = (x2 - x1) / u1;
if (t2 > 0.f) {
bhit = 3;
} else {
if (u1 > 0.f) {
ttemp = (l - x1) / u1;
} else {
ttemp = (-l - x1) / u1;
}
xtemp = x1 + ttemp * u1;
ztemp = z1 + ttemp * w1;
t2 = 0.f;
if (ztemp < -l) {
t2 = (-l - z1) / w1;
bhit = 0;
} else if (ztemp > l) {
t2 = (l - z1) / w1;
bhit = 2;
} else {
t2 = ttemp;
bhit = 1;
}
}
x2 = x1 + t2 * u1;
z2 = z1 + t2 * w1;
total_time__ += t2;
if (bhit == 0) {
u2 = u1;
w2 = -w1;
} else if (bhit == 1) {
u2 = -u1;
w2 = w1;
} else if (bhit == 2) {
u2 = u1;
w2 = -w1;
} else if (bhit == 3) {
tanglec = atan2(z2, x2);
tanglei = atan2(w1, u1);
tangler = pi + tanglec * 2.f - tanglei;
/* Computing 2nd power */
d__1 = u1;
/* Computing 2nd power */
d__2 = w1;
vel = sqrt(d__1 * d__1 + d__2 * d__2);
u2 = cos(tangler) * vel;
w2 = sin(tangler) * vel;
}
/* if(total_time.gt.(iT*tstep)) then */
++it;
/* Computing 2nd power */
d__1 = u2;
/* Computing 2nd power */
d__2 = w2;
en[it - 1] = en[it - 1] + d__1 * d__1 + d__2 * d__2;
/* Computing 2nd power */
d__1 = w2;
enke[it - 1] += d__1 * d__1;
/* Computing 2nd power */
d__1 = u2;
enpe[it - 1] += d__1 * d__1;
/* endif */
/* write(18,*) iter,x2,z2,u2,w2 */
}
/* write(18,*) '' */
if (itmin > it) {
itmin = it;
}
if (ii % 100 == 0) {
s_wsle(&io___43);
do_lio(&c__3, &c__1, (char *)&ii, (ftnlen)sizeof(integer));
do_lio(&c__5, &c__1, (char *)&total_time__, (ftnlen)sizeof(
doublereal));
do_lio(&c__3, &c__1, (char *)&iter, (ftnlen)sizeof(integer));
do_lio(&c__5, &c__1, (char *)&u2, (ftnlen)sizeof(doublereal));
do_lio(&c__5, &c__1, (char *)&w2, (ftnlen)sizeof(doublereal));
e_wsle();
}
}
i__1 = itmin;
for (iter = 1; iter <= i__1; ++iter) {
s_wsle(&io___44);
do_lio(&c__3, &c__1, (char *)&iter, (ftnlen)sizeof(integer));
d__1 = iter * tstep;
do_lio(&c__5, &c__1, (char *)&d__1, (ftnlen)sizeof(doublereal));
d__2 = en[iter - 1] / 1000;
do_lio(&c__5, &c__1, (char *)&d__2, (ftnlen)sizeof(doublereal));
d__3 = enke[iter - 1] / 1000;
do_lio(&c__5, &c__1, (char *)&d__3, (ftnlen)sizeof(doublereal));
d__4 = enpe[iter - 1] / 1000;
do_lio(&c__5, &c__1, (char *)&d__4, (ftnlen)sizeof(doublereal));
e_wsle();
}
return 0;
} /* MAIN__ */
/* Main program alias */ int main_ () { MAIN__ (); return 0; }
最佳答案
我的理解是,f2c在翻译后的文件开头,通常会生成如下的header(文件名和f2c版本号可能不同):
/* helloworld.f -- translated by f2c (version 20160102).
You must link the resulting object file with libf2c:
on Microsoft Windows system, link with libf2c.lib;
on Linux or Unix systems, link with .../path/to/libf2c.a -lm
or, if you install libf2c.a in a standard place, with -lf2c -lm
-- in that order, at the end of the command line, as in
cc *.o -lf2c -lm
Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,
http://www.netlib.org/f2c/libf2c.zip
*/
请遵循这些说明(与 @zwol 建议一致),以便正确编译和链接您的源代码。
-lf2c
或 libf2c.a
),因为它提供诸如 f_open
、do_lio
、e_wsle
或 s_wsle
由 f2c 生成的代码使用。-lm
),因为它提供了代码使用的数学函数(sqrt
、sin
>、cos
和 atan2
)。除此之外,您还需要编译另一个源文件 ran0.f
,并链接到它。
如果您使用的是 GCC,从您报告的错误形式来看,应遵循的步骤是:
使用 Fortran 编译器编译 Fortran 文件 ran0.f
$ gfortran ran0.f -c -o ran0.o
编译您提供的源代码的文件;假设其名称为 foo.c
,
$ gcc foo.c -c -o foo.o
通过链接 f2c 库创建二进制文件 (foo
);假设它安装在操作系统的标准位置,
$ gcc foo.o ran0.o -lf2c -lm -o foo
否则,您必须找到文件 libf2c.a
在系统中的位置(例如,/home/myuser/code/f2c/lib/libf2c.a
) 并在链接命令中使用该路径,而不是 -lf2c
:
$ gcc foo.o ran0.o /home/myuser/code/f2c/lib/libf2c.a -lm -o foo
如果您还想将文件 ran0.f
转换为 C,而不是上面的步骤 1.,您应该首先使用 f2c
转换 Fortran 源文件 ran0.f
到 C 源文件
$ f2c ran0.f
(这将创建文件 ran0.c
),然后编译 C 源文件以创建目标文件 ran0.o
$ gcc ran0.c -c -o ran0.o
然后继续执行上述步骤 2. 和 3.。
关于c - 使用 f2c 从 Fortran 翻译而来的 C 代码中出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50878209/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!