2012-07-13 23 views
0

問題是無論哪種方式連接或包括....被發現庫libircclient.h但它們在庫不使用的功能....聯用的功能的問題在libircclient

#include <stdio.h> 
#include <stdarg.h> 
#include <string.h> 
#include <stdlib.h> 

/*#include "./libircclient-1.6/include/libircclient.h"*/ 
#include "libircclient.h" 

typedef struct 
{ 
    char * channel; 
    char * nick; 

} irc_ctx_t; 


void addlog (const char * fmt, ...) 
{ 
    FILE * fp; // File-Zeiger 
    char buf[1024]; 
    va_list va_alist; 

    va_start (va_alist, fmt); 
#if defined (WIN32) 
    _vsnprintf (buf, sizeof(buf), fmt, va_alist); 
#else               
    vsnprintf (buf, sizeof(buf), fmt, va_alist); 
#endif 
    va_end (va_alist); 

    printf ("%s\n", buf); 

    if ((fp = fopen ("irctest.log", "ab")) != 0) // High level, daher File-Zeiger 
    { 
     fprintf (fp, "%s\n", buf); 
     fclose (fp); 
    } 
} 


void dump_event (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count) 
{ 
    char buf[512]; 
    int cnt; 

    buf[0] = '\0'; 

    for (cnt = 0; cnt < count; cnt++) 
    { 
     if (cnt) 
      strcat (buf, "|"); 

     strcat (buf, params[cnt]); 
    } 


    addlog ("Event \"%s\", origin: \"%s\", params: %d [%s]", event, origin ? origin : "NULL", cnt, buf); 
} 


void event_join (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count) 
{ 
    dump_event (session, event, origin, params, count); 
    irc_cmd_user_mode (session, "+i"); 
    irc_cmd_msg (session, params[0], "Hi all"); 
} 


void event_connect (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count) 
{ 
    irc_ctx_t * ctx = (irc_ctx_t *) irc_get_ctx (session); 
    dump_event (session, event, origin, params, count); 

    irc_cmd_join (session, ctx->channel, 0); 
} 


void event_privmsg (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count) 
{ 
    dump_event (session, event, origin, params, count); 

    printf ("'%s' said me (%s): %s\n", 
     origin ? origin : "someone", 
     params[0], params[1]); 
} 

.... 

GCC irctest.c

/tmp/ccbleNaD.o:在功能`event_join ':irctest.c :(文本+ 0x2b9):

未定義參考`irc_cmd_user_mode' irctest.c :(的.text + 0x2d4 ):

未定義參考`irc_cmd_msg」 /tmp/ccbleNaD.o:在功能

`event_connect ':irctest.c :(文本+ 0x2fe):未定義參照

`irc_get_ctx' 。irctest.c :(文本+ 0x33b):未定義參照

irc_cmd_join' /tmp/ccbleNaD.o: In function dcc_recv_callback ':

irctest.c :(文本+ 0x43c):未定義參考`irc_dcc_msg'

irctest.c :(文本+ 0x49b):未定義參考`irc_dcc_msg '

irctest.c :(文本+ 0x4a7):未定義參考`irc_strerror' ....

collect2: ld gab 1 als Ende-Statuszurück

回答

0

當你編譯你必須鏈接庫。它查找函數聲明,但無法鏈接到包含該定義的對象文件。

我認爲這將是這樣的: gcc -lircclient irctest.c

+0

我已經做過,但後來我的gcc -lircclient irctest.c 在/ usr /斌/勞工處:找不到-lircclient collect2:LD GAB 1 als Ende-Statuszurück 我在與irctest.c相同的文件夾中獲得了libircclient.h。 – Fendrix 2012-07-13 19:57:02

+0

'libircclient.h'只是包含頭文件,它沒有從庫中編譯的代碼。你有一個類似'libircclient.o'或'.so'的文件嗎?你在哪裏得到這個'libircclient'?您需要將對象文件鏈接到,並且看起來好像無法找到它。 – 2012-07-13 20:48:07

+0

謝謝...那是我的錯誤...我總是鏈接libircclient.h而不是libircclient.o – Fendrix 2012-07-14 07:55:49