Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
gcc错误代码可以由cc和g77正确编译_Gcc_Makefile_Cc_G77 - Fatal编程技术网

gcc错误代码可以由cc和g77正确编译

gcc错误代码可以由cc和g77正确编译,gcc,makefile,cc,g77,Gcc,Makefile,Cc,G77,有一个示例C代码链接到两个静态库。 这段代码是通过Makefile编译的。makefile首先从源文件生成一个对象文件,然后通过以下命令将其转换为可执行文件。此外,还将两个库链接到已编译代码: cc -I. -DUNIX -c cademo1.c g77 -o cademo1 cademo1.o ../libChemAppC.a ../libLChemApp.a 这两个命令是Makefile的输出。如果我能自己管理它们,它们就会工作 现在,我需要通过gcc编译代码: $ gcc -sta

有一个示例C代码链接到两个静态库。 这段代码是通过Makefile编译的。makefile首先从源文件生成一个对象文件,然后通过以下命令将其转换为可执行文件。此外,还将两个库链接到已编译代码:

cc -I.  -DUNIX -c cademo1.c
g77  -o cademo1 cademo1.o ../libChemAppC.a ../libLChemApp.a 
这两个命令是Makefile的输出。如果我能自己管理它们,它们就会工作

现在,我需要通过gcc编译代码:

$ gcc -static cademo1.c -L.. -lChemAppC -lLChemApp -o cademo1
但它犯了数百个这样的错误:

.
.
.
rtrnshdr.f:(.text+0x1551): undefined reference to `s_rsue'
rtrnshdr.f:(.text+0x1564): undefined reference to `do_uio'
rtrnshdr.f:(.text+0x156c): undefined reference to `e_rsue'
../libLChemApp.a(bindummy.o): In function `tqhbix_':
bindummy.f:(.text+0x11): undefined reference to `s_copy'
../libLChemApp.a(dt.o): In function `tqdtforid_':
dt.f:(.text+0x11): undefined reference to `s_copy'
../libLChemApp.a(dt.o): In function `tqhdt_':
dt.f:(.text+0x5c): undefined reference to `G77_date_and_time_0'
dt.f:(.text+0x86): undefined reference to `s_wsfi'
dt.f:(.text+0x99): undefined reference to `do_fio'
dt.f:(.text+0xad): undefined reference to `do_fio'
dt.f:(.text+0xc3): undefined reference to `do_fio'
dt.f:(.text+0xd7): undefined reference to `do_fio'
dt.f:(.text+0xed): undefined reference to `do_fio'
../libLChemApp.a(dt.o):dt.f:(.text+0x101): more undefined references to `do_fio' follow
../libLChemApp.a(dt.o): In function `tqhdt_':
dt.f:(.text+0x173): undefined reference to `e_wsfi'
../libLChemApp.a(dt.o): In function `tqhdat_':
dt.f:(.text+0x1f4): undefined reference to `G77_date_and_time_0'
../libLChemApp.a(dt.o): In function `tqhgmy_':
dt.f:(.text+0x22d): undefined reference to `G77_date_and_time_0'
../libLChemApp.a(progcali.o): In function `tqhpnid_':
progcali.f:(.text+0x17): undefined reference to `s_copy'
progcali.f:(.text+0x2c): undefined reference to `s_copy'
progcali.f:(.text+0x44): undefined reference to `s_copy'
progcali.f:(.text+0x5c): undefined reference to `s_copy'
progcali.f:(.text+0x74): undefined reference to `s_copy'
../libLChemApp.a(progcali.o):progcali.f:(.text+0xf7): more undefined references to `s_copy' follow
collect2: error: ld returned 1 exit status
有谁能告诉我如何用gcc编译一个可以由cc和g77正确编译的程序

是否有任何编译器参数可以添加到gcc中,以实现与g77相同的功能?

正如Etan提到的,g77是一个FORTRAN编译器。在这里,您将其用作链接器,将对象和库链接到一个程序中。这一点,加上您的错误消息,非常清楚地表明您链接的库中至少有一个是用FORTRAN编写的

最简单的解决办法是继续使用77国集团来建立联系。链接器将为您的程序添加特定于编译器的特殊库;例如,如果你与g++的C++编译器/链接器链接,那么它将添加到标准的STL库等。 你不会说为什么使用77国集团是不可接受的,但如果不是,你必须弄清楚77国集团正在链接哪些额外的库,并手动将它们添加到你的gcc链接行中


我没有安装它,所以我不能告诉你它们是什么,但你可以运行g77-v。。。它应该向您显示g77前端用于调用链接器的命令:您需要的额外库应该显示在那里。

g77是fortran编译器。。。为什么gcc能够做同样的事情?不过,您应该能够在这些原始命令中用gcc替换cc。我想你也可以告诉gcc在fortran模式下使用一个标志操作。。。这可能有效。missed-DUNIX也是正确的,但这是一个编译时标志:它不太可能有助于解决已构建库中的链接器错误。如果UNIX定义会导致库中的那些对象根本不被链接,这是可能的,但不太可能。但这是一个编译时标志:它不太可能有助于解决已构建库中的链接器错误。但这可能会影响fortran名称的混乱。例如,在某些平台上,fortran例程是带有前缀或后缀下划线tqhpnid_uuu_uu_u_u_u_u____________________________。