Hallo,
so lange bin ich noch nicht mit C vertraut, deshalb könnt ihr mir vielleicht folgendes erklären: Ich habe hier ein Testprogramm, welches die libnet (siehe http://www.packetfactory.net/libnet/index.html) nutzt, die in /usr/lib/libnet.a liegt:
#include <libnet.h> #include <stdio.h> #include <sys/types.h>
int main(int argc, char **argv) { u_char *packet; printf("%x\n",libnet_init_packet(LIBNET_MAX_PACKET + LIBNET_UDP_H, &packet)); return(0); }
Nun will sich dieses simple Ding einfach nicht linken lassen: andre@tux:~> gcc -lnet -DLIBNET_LIL_ENDIAN ./libnet-tester.c /tmp/ccwvgOIT.o: In function `main': /tmp/ccwvgOIT.o(.text+0x16): undefined reference to `libnet_init_packet' collect2: ld returned 1 exit status Exit 1
Ein --verbose zeigt auch, daß die Library gefunden wird. Das Symbol ist auch in /usr/lib/libnet.a definiert:
andre@tux:~> nm /usr/lib/libnet.a | grep libnet_init_packet 00000000 T libnet_init_packet 0000004c T libnet_init_packet_arena
Was habe ich falsch gemacht? Bei einem Test auf NetBSD/mips hat sich gezeigt, daß es dort zum einen nicht nur libnet.a, sondern auch noch das ganze als shared lib gibt (libnet.so). Hier funktioniert auch mein Testprogramm:
andre@qube:~> gcc -lnet -L/usr/pkg/lib -I/usr/pkg/include -DLIBNET_LIL_ENDIAN libnet-tester.c && ./a.out 1
andre
On Sat Sep 22, 2001 at 21:57:51 +0200, Andre Schulze wrote:
Nun will sich dieses simple Ding einfach nicht linken lassen: andre@tux:~> gcc -lnet -DLIBNET_LIL_ENDIAN ./libnet-tester.c /tmp/ccwvgOIT.o: In function `main': /tmp/ccwvgOIT.o(.text+0x16): undefined reference to `libnet_init_packet' collect2: ld returned 1 exit status Exit 1
Libs immer ans Ende schreiben, dann klappt das auch:
$ gcc -o libnet-tester libnet-tester.c ... -lnet -l...
Adam
lug-dd@mailman.schlittermann.de