warning : implicit declaration of function 에 관하여..
모듈 프로그램을 짜고 있습니다.
tqos.h와 tqos_core.c 두 화일로 되어 있습니다.
>> tqos.h의 내용은 아래와 같습니다.
#define _TQOS_H
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/config.h>
#include <linux/types.h>
#ifdef CONFIG_MODVERSIONS
#define MODVERSIONS
#include <linux/modversions.h>
#endif
>> tqos_core.c는 아래와 같구여..
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/config.h>
#include <linux/types.h>
#include <linux/skbuff.h>
#include <linux/netfilter.h>
#include <linux/netfilter_ipv4.h>
#include <linux/in.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <net/sock.h>
#include <net/ip.h>
#include <net/tcp.h>
#include "tqos.h"
static unsigned int tqos_out(unsigned int hooknum, struct sk_buff** skb_pp,
const struct net_device *in, const struct net_device *out,
int (*okfn)(struct sk_buff *));
int init_tqos(void);
void cleanup_tqos(void);
실제 init_tqos에서 nf_register_hook()을 호출하구여..
cleanup_tqos에서 nf_unregister_hook()을 호출합니다.
printk는 tqos_out() 함수에서 debugging용으로 사용중이구여..
컴파일을 하면 error는 없지만 아래의 warning이 계속 발생합니다.
gcc -I/usr/src/linux-2.4/include -D__KERNEL__ -DMODULE -O -Wall -c -o tqos_core.o tqos_core.c
tqos_core.c: In function `tqos_out':
tqos_core.c:32: warning: implicit declaration of function `printk_R1b7d4074'
tqos_core.c: In function `init_tqos':
tqos_core.c:47: warning: implicit declaration of function `nf_register_hook_R3d497220'
tqos_core.c: In function `cleanup_tqos':
tqos_core.c:55: warning: implicit declaration of function `nf_unregister_hook_Re9788db2'
ld -r tqos_core.o -o tqos.o
실제 nf_register_hook, nf_unregister_hook이 포함된 헤더파일도 아래와 같이 include 시켰습니다.
#include <linux/netfilter.h>
그런데 왜 계속 warning이 날까여?별 문제는 없다고 하지만 해결을 해야 할 사항 같아서여..
그리고. tqos_core.c에 #include "./tqos.h"의 위치를
화일 맨 위에 첫번째 라인에 위치시키자 warning 메시지가 다르게 나옵니다.gcc -I/usr/src/linux-2.4/include -D__KERNEL__ -DMODULE -O -Wall -c -o tqos_core.o tqos_core.c
In file included from /usr/src/linux-2.4/include/linux/fs.h:19,
from /usr/src/linux-2.4/include/linux/capability.h:17,
from /usr/src/linux-2.4/include/linux/binfmts.h:4,
from /usr/src/linux-2.4/include/linux/sched.h:10,
from /usr/src/linux-2.4/include/linux/skbuff.h:19,
from tqos_core.c:6:
/usr/src/linux-2.4/include/linux/dcache.h: In function `dget':
/usr/src/linux-2.4/include/linux/dcache.h:254: warning: implicit declaration of function `__out_of_line_bug_R8b0fd3c5'
In file included from tqos_core.c:14:
/usr/src/linux-2.4/include/net/tcp.h: In function `tcp_clear_xmit_timer':
/usr/src/linux-2.4/include/net/tcp.h:856: warning: implicit declaration of function `printk_R1b7d4074'
ld -r tqos_core.o -o tqos.o
답변을 부탁드립니다.
linux/config.h 헤더파일을 가장 처음 include 해 보시는
linux/config.h 헤더파일을 가장 처음 include 해 보시는건 어떨지요?
#include <linux/config.h> 의 위치와 전혀 무관한대여..
음. 다른 방법 없을까여?
소스에서 다른 커널 헤더 파일을 include하기 전에 다음 코드를 넣으
소스에서 다른 커널 헤더 파일을 include하기 전에 다음 코드를 넣으면 됩니다.
요즘에는 소스에 넣지 않고 Makefile 안에서 처리하는 것이 더 일반적입니다. 더 깔끔하기도 하고..
Freedom is another word for nothing left to lose,
Nothing doesn't mean nothing if it ain't free.
댓글 달기