warning : implicit declaration of function 에 관하여..

iris422의 이미지

모듈 프로그램을 짜고 있습니다.
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

답변을 부탁드립니다.

kslee80의 이미지

linux/config.h 헤더파일을 가장 처음 include 해 보시는건 어떨지요?

iris422의 이미지

음. 다른 방법 없을까여?

flyduck의 이미지

소스에서 다른 커널 헤더 파일을 include하기 전에 다음 코드를 넣으면 됩니다.

#ifdef CONFIG_MODVERSIONS 
#define MODVERSIONS 
#include <linux/modversions.h> 
#endif 

요즘에는 소스에 넣지 않고 Makefile 안에서 처리하는 것이 더 일반적입니다. 더 깔끔하기도 하고..

KERNEL_PATH = xxx

include $(KERNEL_PATH)/include/linux/config.h

ifdef CONFIG_MODVERSIONS
CFLAGS += -DMODVERSIONS -include $(KERNEL_PATH)/include/linux/modversions.h
endif

Freedom is another word for nothing left to lose,
Nothing doesn't mean nothing if it ain't free.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.