2012-09-13 45 views
1

我一直試圖安裝libnids(Ubuntu LTS和Mac OS X)整天,現在我知道如何編譯程序。編譯使用libnids

我在這裏寫這個,因爲沒有太多的文檔,但在libnids下載的文件夾中有一個樣本與makefile。這個Makefile的重要的事情是這些:

CC = gcc  
PCAPLIB  = -lpcap  
LNETLIB  = -lnet  
LIBS  = -L../src -lnids $(PCAPLIB) $(LNETLIB) -lgthread-2.0 -lnsl 

example: 
    $(CC) example.c -o example $(LIBS) 

如果你在Mac OS X編譯它忽略了這一點:-lgthread-2.0 -lnsl -L ../ SRC 但我不知道因爲這些被遺漏的東西而停下來工作。

+1

如果在庫安裝過程中遇到如下警告,請不要擔心:** hash.c:18:警告:忽略讀取的返回值,用屬性warn_unused_result聲明** –

+0

唯一的依賴關係需要安裝的是:** libglib2.0-dev ** [libnet1.1.2.1](http://packetfactory.openwall.net/libnet/dist/libnet.tar.gz)[libpcap](http:// www.tcpdump.org/) –

回答

1

我找到了。最好的方法是編譯庫,然後使用本地引用「.a」文件。

的Makefile例子

CC = gcc -g -Wall 
GLIB = `pkg-config --cflags --libs glib-2.0` 
PCAPLIB  = -lpcap 
LNETLIB  = -lnet 

LIBS_SRC = libnids-1.24/src/libnids.a 
LIBS  = $(PCAPLIB) $(LNETLIB) -lgthread-2.0 

program: program.c 
    $(CC) -c $(CFLAGS) program.c -o program.o $(GLIB) $(LIBS) 
    $(CC) program.o -o program $(LIBS_SRC) $(GLIB) $(LIBS) 

但是,如果你想編譯庫,並把它安裝到你的系統,你得使用-lnids代替上述方法。但第一個解決方案總是有效的。

0

我下libnids編譯樣本時,得到錯誤:

的gcc -o溢出overflows.o -L ../ SRC -lnids -lpcap -lnet -lgthread-2.0 -lnsl ../src/libnids.a /usr/bin/ld:../src/libnids.a(libnids.o):未定義引用符號'g_async_queue_pop' /lib/x86_64-linux-gnu/libglib-2.0.so.0:錯誤添加符號:DSO命令行缺少 collect2:錯誤:LD返回1退出狀態 化妝:* [溢出]錯誤1

您推薦

GLIB = `pkg-config --cflags --libs glib-2.0` 

解決了我的問題。

PS:我的系統Ubuntu 13.10。 64位。