LinuxSir.cn,穿越时空的Linuxsir!

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

[求助]!!关于LINUX C编程的若干问题!!

[复制链接]
发表于 2006-3-15 09:24:45 | 显示全部楼层 |阅读模式
小弟有初学LINUX C编程,遇到若干问题,不知如何解决,请大虾们帮忙一二,不胜感激。

在程序中,需要用到若干源文件和头文件(这些文件又会引用其它的文件),这些文件不在LINUX默认的/usr/include目录中。如何在程序中使用?我的做法是在/usr/include文件中用ln创建一个链接到需要用到的文件目录。但是,在程序用引用include来的文件中的一个函数,譬如mipv6_bcache_get函数,编译时会出现“undefined reference to ...”的错误。

另外,如果按照上述做法,有些链接过来的文件中定义的变量、结构,会和原有的/usr/include目录下文件中的定义冲突,出现“redefine...”的错误。

不知道上述问题,我描述清楚了没有。请大虾们不吝赐教。谢谢。
发表于 2006-3-15 09:43:52 | 显示全部楼层
Post by ybsilly
小弟有初学LINUX C编程,遇到若干问题,不知如何解决,请大虾们帮忙一二,不胜感激。

在程序中,需要用到若干源文件和头文件(这些文件又会引用其它的文件),这些文件不在LINUX默认的/usr/include目录中。如何在程序中使用?我的做法是在/usr/include文件中用ln创建一个链接到需要用到的文件目录。但是,在程序用引用include来的文件中的一个函数,譬如mipv6_bcache_get函数,编译时会出现“undefined reference to ...”的错误。

另外,如果按照上述做法,有些链接过来的文件中定义的变量、结构,会和原有的/usr/include目录下文件中的定义冲突,出现“redefine...”的错误。

不知道上述问题,我描述清楚了没有。请大虾们不吝赐教。谢谢。


用gcc的-I参数可以指定到那些目录下去搜索头文件。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-15 09:56:22 | 显示全部楼层
我用过了,似乎还是会出现“undefined reference to ...”的错误,应该是在include中包含的文件并没有真正的链接过来。
还有就是引用的不同文件夹中可能会有同名的文件(这是加过MIPL补丁的LINUX内核源代码)。

还有一种错误是,在一个文件中用到另一个文件定义的struct,在该文件中也include了那个定义的文件,但是编译时会出现“uncomplete reference ...”的错误。不知道是什么原因?
回复 支持 反对

使用道具 举报

发表于 2006-3-15 11:54:40 | 显示全部楼层
我想大概是你没链接所需要的库
回复 支持 反对

使用道具 举报

发表于 2006-3-15 14:41:55 | 显示全部楼层
gcc -I头文件 -L库
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-15 18:43:52 | 显示全部楼层
已经使用了-I 和-L了.
需要用到的头文件在/usr/src/linux/net/ipv6/mobile_ip6目录中.如果用绝对路径,即#include</usr/src/linux/net/ipv6/mobile_ip6/bcache.h>.但是这样会出现两个问题:
1. 对一些系统源文件会中出现的引用的其他struct类型的定义会莫名其妙的出现
field `list' has incomplete type的错误.其中list是在另外一个文件中定义的结构体.
2. /usr/src/linux/net/中的某些文件中定义的变量肯能会跟原有的/usr/include里某些文件中的定义冲突.出现redefinition of `struct in6_addr'的错误.
回复 支持 反对

使用道具 举报

发表于 2006-3-15 22:34:34 | 显示全部楼层
楼主:conio.h在哪个目录下啊?
怎么看一个库文件在哪个目录下?
谢谢~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-15 22:43:49 | 显示全部楼层
俺也是菜鸟。用which或者find应该可以吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-15 22:44:38 | 显示全部楼层
我的程序是用g++编译的,不知道这会不会有什么影响?
回复 支持 反对

使用道具 举报

发表于 2006-3-15 23:23:01 | 显示全部楼层
Post by ybsilly
俺也是菜鸟。用which或者find应该可以吧
楼主谢谢你!
[root@pigeonoo /]# find -name conio.h
find: ./proc/3995/fd: 没有那个文件或目录
./usr/lib/bcc/include/conio.h

不过为什么会出现第二行的信息?
回复 支持 反对

使用道具 举报

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

本版积分规则

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