LinuxSir.cn,穿越时空的Linuxsir!

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

请高手指教多个工程整合的编译、连接问题

[复制链接]
发表于 2005-4-17 12:48:16 | 显示全部楼层 |阅读模式
编写了一个GUI程序,已经可以编译连接生成可执行文件了。
但是在导入到由其它几个源代码组成的程序时,我修改了Makefile文件,把GUI部分,包括它们的倚赖库、附加选项添加上去。所有的GUI程序可以编译成*.o文件。但在连接的时候总是会出现gtk相关的组件、函数未定义。不知道到底因为什么原因。
请高手给以指教,小弟跪谢了。

P.S:不包含GUI的程序也是可以独立编译、连接成功的。
     修改Makefile指定的GUI依赖库等,是通过Configure脚本检测系统得到的。
发表于 2005-4-17 13:24:21 | 显示全部楼层
gcc `pkg-config --cflags --libs gtk+-2.0` YOURFILE.c
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-17 14:47:20 | 显示全部楼层
Post by liquid_zigong
gcc `pkg-config --cflags --libs gtk+-2.0` YOURFILE.c



如果只是这么简单就好了呀:)

原始的程序其实是一个很大的项目,比如xine那总类型的。我没有用原来的GUI部分,而自己编写了一个。
自己的GUI部分已经通过Makefile可以顺利的编译,连接成功。但是在与原来的工程想连接时,添加了GTK等的一些选项到CFLAGS选项中,以支持GUI;同时,也把所有的依赖库包含在LIB中了。可是可以编译成OBJ文件,但在连接的时候,总提示组件没有找到,类似:G_OBJECT未定义等等,非常困惑
回复 支持 反对

使用道具 举报

发表于 2005-4-17 19:31:16 | 显示全部楼层
看看pkg-config --cflags --libs gtk+-2.0执行的结果,然后把它加到Makefile中。如果要真正发布代码,必须要熟悉autotools编译工具。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-18 09:32:45 | 显示全部楼层
Post by kj501
看看pkg-config --cflags --libs gtk+-2.0执行的结果,然后把它加到Makefile中。如果要真正发布代码,必须要熟悉autotools编译工具。




可以确定,添加在makefile中的CFLAGS,以及DEP_LIBS是没有问题的,就是'pkg-config --cflags --libs gtk+-2.0' 得到的结果,但是连接时候错误仍然存在,如下:

x.o(.text+0x34): In function `main':
: undefined reference to `G_CALLBACK'
x.o(.text+0x3e): In function `main':
: undefined reference to `G_OBJECT'
x.o(.text+0x5a): In function `main':
: undefined reference to `g_signal_connect'
x.o(.text+0x6b): In function `main':
: undefined reference to `gtk_type_check_object_cast'
x.o(.text+0x8c): In function `main':
: undefined reference to `gtk_type_check_object_cast'
x.o(.text+0xb5): In function `main':
: undefined reference to `gtk_type_check_object_cast'
x.o(.text+0xdf): In function `main':
: undefined reference to `G_CALLBACK'
x.o(.text+0xe9): In function `main':
: undefined reference to `G_OBJECT'
x.o(.text+0x105): In function `main':
: undefined reference to `g_signal_connect'
x.o(.text+0x116): In function `main':
: undefined reference to `gtk_type_check_object_cast'
x.o(.text+0x176): In function `testbutton':
: undefined reference to `G_CALLBACK'
x.o(.text+0x180): In function `testbutton':
: undefined reference to `G_OBJECT'
x.o(.text+0x19c): In function `testbutton':
: undefined reference to `g_signal_connect'
x.o(.text+0x1ad): In function `testbutton':
: undefined reference to `gtk_type_check_object_cast'
x.o(.text+0x1ce): In function `testbutton':
: undefined reference to `gtk_type_check_object_cast'
x.o(.text+0x1f7): In function `testbutton':
: undefined reference to `gtk_type_check_object_cast'
x.o(.text+0x221): In function `testbutton':
: undefined reference to `G_CALLBACK'
x.o(.text+0x22b): In function `testbutton':
: undefined reference to `G_OBJECT'
x.o(.text+0x247): In function `testbutton':
: undefined reference to `g_signal_connect'
x.o(.text+0x258): In function `testbutton':
: undefined reference to `gtk_type_check_object_cast'

collect2: ld returned 1 exit status
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-18 18:27:42 | 显示全部楼层

问题已经找到了

感谢大家在网上的交流,现在问题已经解决。

主要问题是,configure脚本调用gtk-cofig --version来作为gtk库的检测版本号。虽然在Makefile中,添加了高版本的gtk库作为依赖库,但是原先低版本的库也当成了依赖库,导致调用高版本的gtk库函数发生无法找到的错误。
回复 支持 反对

使用道具 举报

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

本版积分规则

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