LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1180|回复: 6

gtk程序的编译

[复制链接]
发表于 2006-3-31 19:51:24 | 显示全部楼层 |阅读模式
现在有两个源文件:main.c 和 get_res.c。
记得原来直接编译的话是  gcc -c main.c  `pkg-config --cflags --libs gtk+-2.0 ` 即可
但是现在需要编译成中间文件,然后连接。
我想是这样作的


gcc -c main.c -o main.o `pkg-config --cflags --libs gtk+-2.0 `
gcc -c get_res.c -o get_res.o
gcc main.o get_res.o  -o proxy_test

但是出现错误,应该如何解决呢?

gcc -c main.c -o main.o `pkg-config --cflags --libs gtk+-2.0 `
gcc: --export-dynamic: linker input file unused because linking not done
gcc: -lgtk-x11-2.0: linker input file unused because linking not done
gcc: -lgdk-x11-2.0: linker input file unused because linking not done
gcc: -latk-1.0: linker input file unused because linking not done
gcc: -lgdk_pixbuf-2.0: linker input file unused because linking not done
gcc: -lm: linker input file unused because linking not done
gcc: -lpangoxft-1.0: linker input file unused because linking not done
gcc: -lpangox-1.0: linker input file unused because linking not done
gcc: -lpango-1.0: linker input file unused because linking not done
gcc: -lgobject-2.0: linker input file unused because linking not done
gcc: -lgmodule-2.0: linker input file unused because linking not done
gcc: -ldl: linker input file unused because linking not done
gcc: -lglib-2.0: linker input file unused because linking not done
gcc -c get_res.c -o get_res.o
gcc main.o get_res.o  -o proxy_test #`pkg-config --cflags --libs gtk+-2.0 `
main.o(.text+0xe): In function `btnTest_Clicked':
: undefined reference to `g_print'
main.o(.text+0x25): In function `destroy':
: undefined reference to `gtk_main_quit'
main.o(.text+0x4a): In function `main':
: undefined reference to `gtk_init'
main.o(.text+0x56): In function `main':
: undefined reference to `gtk_window_new'
main.o(.text+0x5e): In function `main':
: undefined reference to `gtk_window_get_type'
main.o(.text+0x6d): In function `main':
: undefined reference to `g_type_check_instance_cast'
main.o(.text+0x7d): In function `main':
: undefined reference to `gtk_window_set_title'
main.o(.text+0x82): In function `main':
: undefined reference to `gtk_container_get_type'
。。。。。。。
 楼主| 发表于 2006-4-1 16:47:59 | 显示全部楼层
没有人知道吗?感觉比较常用的。
写gtk的时候不会就直接gcc一步把编译和连接搞定吧
回复 支持 反对

使用道具 举报

发表于 2006-4-1 17:14:11 | 显示全部楼层
楼主的main.c文件含有main函数吧?不知道楼主如何得知含有main函数的c文件能编译成模块?----我不知道是否可以。

可以看看http://www.linuxsir.cn/bbs/showthread.php?t=218305
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-1 17:35:56 | 显示全部楼层
对,main.c是含有main()的。
按你这么说,应该如何将main.c和get_res.c结合起来呢?
问题像是出现在库文件的连接上
我看了这些精华帖,但是没有找到,如果编译和连接分开时候应该如何处理库文件的连接问题
回复 支持 反对

使用道具 举报

发表于 2006-4-1 19:06:24 | 显示全部楼层
如果确定这样是可以的话:
gcc -c main.c `pkg-config --cflags --libs gtk+-2.0 `


那么请如下编译:
gcc -c main.c -o main.o `pkg-config --cflags gtk+-2.0 `
gcc -c get_res.c -o get_res.o
gcc main.o get_res.o -o proxy_test `pkg-config --libs gtk+-2.0 `


原因: gcc -c 只是编译,不连接,所以只要与编译相关的选项 `pkg-config --cflags gtk+-2.0 `即可;最后那步是进行连接,所以需要库的支持,就加上 `pkg-config --libs gtk+-2.0 `
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-1 19:08:29 | 显示全部楼层
好的,我回去试一下,谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-5 21:14:47 | 显示全部楼层
谢谢rickxbx,现在好了。
看来编译和连接的时候都需要pkg-config来设置参数的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表