mingw-gcc test.c -o test `pkg-config --cflags --libs gtk+-2.0`编译,错误ld returned 1 exit status

mingw-gcc test.c -o test `pkg-config --cflags --libs gtk+-2.0`编译,错误ld returned 1 exit status,第1张

gcc helloworldc -o helloworld`pkg-config --cflags --libs gtk+-20`

你要注意 pkg前面的点 和 gtk+20后面的点

这个点是 Tab 上面的那个点, 也是 Q 上面的那个1的左边,

-o helloworld 的前面是 Tab键盘按出来的,不是空格,不然会出错,

我以前也和你一样,慢慢拉,加油学习~! 我现在学习GTK+,感觉GTK+比MFC好学多了,而且这个东西还跨平台,MFC都不跨平台,反正也是写界面,用GTK+就OKL俄~!哈哈哈哈和~!

在Linux下面,如果要编译一个C语言源程序,我们要使用gcc编译器

先将源文件编译成目标文件:gcc - c helloc

生成helloo文件,再将目标文件编译成可执行文件:gcc -o hello helloo

如:

int main(int argc,char argv)

{

printf("Hello Linux\n");

}

扩展资料:

在使用GCC编译器的时候,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,这里只介绍其中最基本、最常用的参数。具体可参考GCC Manual。

GCC最基本的用法是∶gcc [options] [filenames]

其中options就是编译器所需要的参数,filenames给出相关的文件名称。

参考资料:

百度百科_gcc

格式 gcc [option] [sourcefilename]

介绍一些常用的选项:最简单的是:gcc helloc

默认的情况下将生成aout的可执行性文件,你只需要在终端上输入/aout就可以看到执行的结果

如果你想指定生成目标文件的名字那么你可以加上 -o选项,命令如下:

gcc -o hello helloc

命令如下:

gcc -c hello helloc

在控制台 gcc /helloc -o /helloout,编译没错的话,就会在根目录出现一个helloout的文件,然后 /helloout,就可以看到结果了 具体参阅GCC的用法 一gcc历史 GCC最早是Richard Stallman在十几年前编写的针对于C的编译器,意思即为GNU C Compiler,后来发展支持Ada,C++,Java,Objective C,Pascal,COBOL,以及支持逻辑编程的Mercury语言,后来其英文原名变为:GNU Compiler ollection([1])除此之外,GCC对于各种硬件平台都提供了完善的支持。 一般的,GCC的编译功能包括gcc(C的编译器),g++(C++的编译器),在编译过程中,一共有四步工作。 1预处理,生成i文件,C文件编译为i文件,C++文件编译为ii文件,它们都为源程序的预处理结果文件以最简单的Hello World程序为例: // testc #include "stdioh" #define MAX 9 int main() { int a; a=MAX; printf("Hello Worldn"); } 用cpp testc testi 可得到预处理文件testi,通过查看该文件,我们可以看到,我们引入的include文件已经被引入处理,define定义的部分已经被完全带入。 2预处理文件转换成汇编语言,生成s文件。这一步利用egcs来完成(在mingw标准包中没有见到这个预编译器,所以测试没有成功,将继续测试) 3汇编变为目标文件,生成o文件,利用as来完成。 4连接目标文件,生成可执行程序,利用ld来完成(后续继续研究ld编译过程。) 二GCC参数祥解 -x language filename 设定文件使用的语言,这样源程序的后缀名无效了,并对gcc后接的多个编译文件都有效。这样如 果存在c和cpp文件联编会有问题,解决这个问题用到了下一个参数 -x none filename,在下面做介绍。因为在预处理过程中对于c和cpp文件的处理方式是不一样的。可以使用的参数有:'c','objective- c','c-header','c++','cpp-output','assembler','assembler-with-cpp'编译的时候, 如果有这样的一个用C语言写的testtmp的文件,用gcc编译的时候就用gcc -x c testtmp就可以让gcc用编译C语言的方式来编译testtmp -x none filename 关掉上一个选项,就是让gcc根据文件名后缀,自动识别文件类型。如用下列方式编译: gcc -x c testtmp -x none test2c 这样可以自由地选择编译方式 -c 只激活预处理,编译和汇编,也就是把程序做成obj文件。如gcc -c testc 就会生成testo文件,当然这样还只是目标文件,需要经过ld连接器对所有的o文件进行联接才能生成可执行文件 -S 只激活预处理和编译,把文件编译到汇编代码。相当到对源程序做一个egcs *** 作,生成s文件。可以查看生成的汇编文件结果。这个对于研究汇编语言的程序员来说是很有作用的。 -E 只激活预处理,这个将对文件进行预处理,将对所有引入的include文件和define定义的量进行代换,为我们开头所说的gcc 编译的第一步,即用cpp命令将程序语言文件进行预处理但这一步不生成结果文件,如果你需要生成结果文件保存,那么需要利用系统中的输出重定向。 -o 定制目标名称,缺省的时候在unix和linux平台下gcc filename的结果是一个文件名为aout的文件,windows下用mingw里带的gcc编译结果是aexe。如果我们用gcc -o helloexe testc的话,将生成helloexe可执行程序。这个并不一定只限于最后一步可执行程序的生成,如用上面所讲的-S生成的汇编程序也可以用-o参 数生成,比如 gcc -o helloasm -S testc 这样helloasm就是testc经过预处理和编译之后的结果。 -pipe 使用管道来代替编译中的临时文件,因为编译的整个过程有几个不同的步骤,每一个步骤都是以前一个步骤的输出为输入的,这样就涉 及到数据传递的问题,在没有-pipe参数的情况下,是用临时文件的形式来进行传递的,在有该情况的时候就利用管道来传递中间数据。当然,在某些系统中, 汇编不能读取管道数据,这样这个参数就不能正常工作了。 -ansi 关闭gnu c与ansi c不兼容的特性,激活ansi c的专有特性,在此情况下,处理器会定义一个__STRICT_ANSI__的宏,在有些头文件中会关注该宏是否被申明过,以避免某些函数的引入。此项可参照ansi c与gnu c的差别得到更多理解。 -fno-asm 此选项为ansi选项功能的一部分,禁止将asm,inline,typeof用作关键字。 -fno-strict-prototype 这个选项只对g++有作用。这个参数让编译器将所有没有参数的函数都认为是没有显式参数的个数和类型的函数,而不是没有参数。而对于gcc来说,会将没有带参数的函数认成没有显式说明的类型。 -fthis-is-variable 这个参数仅对C++程序有效,可以让this做一般变量使用,允许对this赋值 -fcond-mismatch 允许条件表达式的第二和第三参数类型不匹配表达式的值为void型 -funsigned-char -fno-signed-char -fsigned-char -fno-unsigned-char 这四个是对char在编译时进行的设置,它们分别决定将char设为unsigned char或signed char -include filename 加入头文件的位置,以使程序中顺利使用#include ,这样就可以在编译的时候这样编译:gcc testc -include /include/testh,进行联编。 -imacros filename 将filename中的宏扩展到gcc的输入文件里,宏定义本身不会出现在输入文件中。意即在编译某个文件testc的时候,它里面申明的宏如果在没有用到该参数的时候,生成目标文件之后就会被丢弃掉,而在用了这个参数之后,这些宏将被保留用于之后文件的编译。 -Dmacro 相当于#define macro,宏的内容为字符串'1'。如在编译的时候使用gcc -o testexe testc -DDEBUG就相当于在testc里面定义了DEBUG宏,值为字串'1'。可用如下程序测试可知: //testc #include "stdioh" int main() { printf("Hello Worldn"); #ifdef DEBUG printf("hellon"); #endif } 如用gcc -o testexe testc编译,刚运行结果为: Hello World 如用gcc -o testexe testc -DDEBUG编译,则运行结果为: Hello World hello 因此可以在下一种编译方法中相当于在testc里面定义了DEBUG宏。 -Dmacro=define 作用同上,但设定宏的值为define -Umacro 相当于给程序中定义的宏作了一次undefine即:#undef macro -undef 取消了对任何非标准友的定义 -Idir 在#include 的时候,先在用这个参数指定的位置找头文件,如果没有找到,则到缺省的目录找头文件 -I- 取消-Idir的作用,表明以后编译的程序将不在-Idir指定的目录里寻找头文件。 -idirafter dir 在-I的目录里面查找失败之后,再在这个目录里面查找头文件,这样的参数为设置头文件查找的优先级问题比较有帮助。 -iprefix prefix -iwithprefix dir 这两个参数一起用,在-I目录寻找失败的时候,到prefix的dir下查找头文件。 -nostdinc 编译器不再系统缺省的头文件目录里面找头文件。这样就可以精确地确定头文件的来源,应该比较慎用,在对编译器不是很了解的情况下容易造成编译失败 -nostdinc C++ 不在g++的标准路径中找头文件,但在其他的路径中继续找。在创lib的时候用。 -C 为了有效的分析程序,有预处理的时候不删除注释信息,与-E一起使用,有利用分析程序的过程。 -M 生成文件的关联的信息,这样就可以知道源代码文件里面关联了哪些它所依赖的头文件。 -MM 同上,但忽略由#include 造成的依赖关系 -MD 跟-M相当,但是输出导入到d文件中,如gcc -MD testc,刚输出的依赖关系存放在testd文件里。 -MMD 跟-MM相同,但是输出到d文件中,如gcc -MMD testc,刚输出的依赖关系存放在testd文件里。忽略#include 的关系 -Wa,option 这个参数将option传给汇编程序,如果option中有逗号,则会把option分成多项,传给汇编程序。 -Wl,option 这个参数将option传给连接程序,如果option中有逗号,则会把option分成多项,传给连接程序。 -llibrary 用于制定编译的时候使用的库,如 gcc -lgtk tsetc则程序使用gtk库进行编译,不过需要注意的是gcc库一般都是以libnamea来命名库文件,在用-l参数来加入库文件的时候,直接用-lname来引入,而前面的lib被省掉。这一点需要注意。 -Ldir 编译的时候设定库文件查找的路径,不然的话,编译器只在标准库路径里面找库。 -00 -01 -02 -03 编译器的优化选项,-00表示没有优化,-01为缺省值,-03为最高。 -g 在编译的时候,产生调试信息 -gstabs 以stabs格式声称调试信息,但不包括gdb的调试信息。 -gstabs+ 以stabs格式声称调试信息,包括gdb的调试信息。 -ggdb 该参数将把gdb的调试信息输出 -static 这个参数将禁止使用动态库,这样程序只能连接静态库。 -share 这个参数将让程序尽量使用动态库 -traditional 试图让编译器支持传统的C语言的特性 三总结 gcc的参数还远远多于上面写到的这些,但是有以上的参数我们已经可以对gcc的大部分编译掌握的比较熟练了,更多的参数介绍可以参照GCC的manual,现在已有翻译了的中文手册,地址在下面的参考文献里面被列出,有兴趣的朋友可以参考。~

以上就是关于mingw-gcc test.c -o test `pkg-config --cflags --libs gtk+-2.0`编译,错误ld returned 1 exit status全部的内容,包括:mingw-gcc test.c -o test `pkg-config --cflags --libs gtk+-2.0`编译,错误ld returned 1 exit status、linux 怎么编译c的源程序的gcc,编译命令是什么、“linux”怎么编译c的源程序的“gcc”编译命令是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10129566.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存