概述
调用GCC为“cc”与“gcc” @H_301_0@我知道,在大多数GNU / linux系统上,GCC可以通过命令行(而不是“gcc”)命名为“cc”。 海湾合作委员会的行为是否与其他方式有所不同?@H_301_0@例如,我知道通过名称“g ++”而不是“gcc”来调用GCC会导致GCC的行为不同(在C ++标准库中将.c文件视为C ++源代码和链接)。 “gcc”和“cc”之间的行为有没有类似的区别?@H_301_0@编辑:到目前为止收到的答案都没有给出明确的 “是”或“否”,以确定GCC是否会以一种方式相对于另一种方式行为不同。 然而,潜入源头检查其行为的想法使我走上了这条道路。 根据我在那里find的,我现在相信答案是:@H_301_0@GCC的行为是一样的,不pipe它是通过“gcc”还是“cc”来调用 。@H_301_0@使用GDI +绘制文本时,是否可以定义精确的字体大小?@H_301_0@创buildac#windows服务来轮询数据库@H_301_0@如何在linux上制作透明窗口@H_301_0@从用户模式win32应用程序中可靠地find当前进程的_write()函数的地址@H_301_0@如何远程注销用户?@H_301_0@使用不同SDK的DLL@H_301_0@linux中另一个进程的重复文件描述符(不带sendmsg)@H_301_0@在linux和windows单声道@H_301_0@使用windows身份valIDation从非域计算机访问sql Server 2005@H_301_0@在windows上交叉编译?@H_301_0@对于咧嘴笑话,我只是从gcc( main.c – > top_lev.c – > opts.c – > langhooks.c )中使用argv[0]的方法进行langhooks.c ,看来argv[0]而不是给malloc什么东西报告失败。 如果argv[0]不是gcc以外的东西,那么似乎没有任何行为改变。@H_301_0@在我看来, cc (链接到一些旧的SUS规范)旨在成为系统编译器与供应商无关的接口。 它被标记为遗产:@H_301_0@c89实用程序提供了ISO C标准的接口,但cc实用程序接受C语言的未指定方言:它可以是标准C,常用C或其他变体。 可移植的C程序应该写成符合ISO C标准并用c89编译。@H_301_0@POSIX有一个叫做c99的工具,我相信它是c89的继承者。 它说@H_301_0@c99实用程序基于最初在ISO POSIX-2:1993标准中引入的c89实用程序。 c89中的一些更改包括修改标准库部分的内容以考虑新的标题和选项; 例如,将其添加到-l rt *** 作数,并为跟踪功能添加-l跟踪 *** 作数。@H_301_0@我对所有这些不同的标准并不是很熟悉,但看起来像是最近的SUSv3( POSIX:2004 )和更新的POSIX:2008 (似乎还没有SUS编号)没有指定一个实用程序称为cc ,但只有实用程序称为c99 。 顺便说一句,我的linux系统( Arch_linux )包含c99的联机帮助页,但不包含c89 ,但只包含一个名为cc的实用程序,但不包含c89和c99 。 在那里很混乱:)@H_301_0@在我的Mac从man gcc :@H_301_0@在苹果的GCC版本中,cc和gcc实际上是象gcc-version这样的编译器的符号链接。 类似地,c ++和g ++是指向像g ++ – 版本这样的编译器的链接。@H_301_0@基于此,我会认为cc和gcc的行为是一样的。@H_301_0@我今天也有同样的疑问,我试图自己找到它:@H_301_0@$ which cc /usr/bin/ccc $file /usr/bin/cc /usr/bin/cc: symbolic link to '/etc/alternatives/cc' $file /etc/alternatives/cc /etc/alternatives/cc: symbolic link to '/usr/bin/gcc' $which gcc /usr/bin/gcc@H_301_0@所以,基本上cc指向gcc 。@H_301_0@你也可以使用cc -v和gcc -v检查。 如果他们打印出同样的东西,那就意味着他们完全一样。@H_301_0@即使gcc独立于argv [0]的值 *** 作,不管所指定的编译器是什么,并不是所有的软件都是相同的。@H_301_0@在RHEL 5.5(gcc 4.1.2)上构建zlib 1.2.5时:@H_301_0@$ md5sum $(which cc) 69a67d3029b8ad50d41abab8d778e799 /usr/bin/cc $ md5sum $(which gcc) 69a67d3029b8ad50d41abab8d778e799 /usr/bin/gcc@H_301_0@但:@H_301_0@$ CC=$(which cc) ./configure Checking for shared library support... Tested /usr/bin/cc -w -c -O ztest20557.c Tested cc -shared -O -o ztest20557.so ztest20557.o /usr/bin/ld: ztest20557.o: relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC ztest20557.o: Could not read symbols: Bad value collect2: ld returned 1 exit status No shared library support; try without defining CC and CFLAGS Building static library libz.a version 1.2.5 with /usr/bin/cc. Checking for off64_t... Yes. Checking for fseeko... Yes. Checking for unistd.h... Yes. Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf(). Checking for vsnprintf() in stdio.h... Yes. Checking for return value of vsnprintf()... Yes.@H_301_0@和:@H_301_0@$ CC=$(which gcc) ./configure Checking for shared library support... Building shared library libz.so.1.2.5 with /usr/bin/gcc. Checking for off64_t... Yes. Checking for fseeko... Yes. Checking for unistd.h... Yes. Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf(). Checking for vsnprintf() in stdio.h... Yes. Checking for return value of vsnprintf()... Yes. Checking for attribute(visibility) support... Yes.@H_301_0@配置脚本不考虑在linux系统上的cc可能是gcc的可能性。 所以,要小心你的假设。@H_301_0@cc只是调用编译器的UNIX方式,它可以在所有的Unices上运行。@H_301_0@这个线程可能会老,但我想添加一些东西(也许有人会在未来找到它)。@H_301_0@如果你编译这个程序@H_301_0@#include <stdio.h> #include <stdlib.h> voID myFunction(char *args) { char buff1[12]; char buff2[4] = "ABC"; strcpy(buff1,args); printf("Inhalt Buffer2: %s",buff2); } int main(int argc,char *argv[]) { if(argc > 1) { myFunction(argv[1]); } else printf("no arguments sir daimler benz"); getchar(); return 0; }@H_301_0@与“gcc”,你传递“AAAAAAAAAAAAAAAAAAAAAAAAA”作为参数,它不会溢出到缓冲区2,虽然它会做,如果你编译“cc”,这对我来说是一个暗示,如果你使用“gcc”工作不同,也许通过在buff1和buff2字段的内存段之间放置空间?@H_301_0@也许有更多体验的人可以在这里把光照在黑暗中。@H_301_0@如果GCC文档中的可执行文件名不是gcc,而是cc ,则GCC文档中没有任何内容表示GCC的行为不同。 GNU Fortran编译器甚至提到 :@H_301_0@gcc命令的一个版本(也可以作为系统的cc命令安装)@H_301_0@自1983年以来我一直在使用UNIX,而当时的C编译器被称为cc 。 很高兴认为,也许我写回来的makefile仍然可以工作在最新的linux发行版上。@H_301_0@“不管是通过”gcc“还是”cc“调用,GCC的行为都是一样的。”@H_301_0@[引自原帖。]@H_301_0@根据我在Ubuntu 14.04中的经验,事实并非如此。@H_301_0@当我编译我的程序使用:@H_301_0@gcc -finstrument-functions test.c@H_301_0@我的代码行为没有任何改变。 但是当我编译使用@H_301_0@cc -finstrument-functions test.c@H_301_0@它的行为有所不同。 (在这两种情况下,我将适当的更改合并到我在此处介绍的代码中以使工具功能正常工作)。@H_301_0@考虑到这是来自UNIX,我会说“cc”是通用名称,“gcc”是实际的编译器。 即“gcc”提供了“cc”,因此寻找“cc”的程序将会找到并使用“cc”,对所使用的实际编译器毫不知情。@H_301_0@此外,UNIX程序应该不知道用于调用它们的实际名称(认为windows桌面快捷方式 – 检查快捷方式的调用是没有意义的),因此,不要使用“gcc”和“cc”同样的事情,如果“cc”是一个“gcc”的链接。@H_301_0@除非当然,“cc”不是一个符号链接,而是一个调用gcc的shell脚本。@H_301_0@对于我的 *** 作系统(Ubuntu 14.04) cc不允许tab完成,而gcc 。 总结
以上是内存溢出为你收集整理的调用GCC为“cc”与“gcc”全部内容,希望文章能够帮你解决调用GCC为“cc”与“gcc”所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
评论列表(0条)