第一次使用动态库链接出现undefined referenced to...
千羽鸣 2010-08-19 09:19:04 我不会写Makefile,写的一个如下:
linkthread.o:linkthread.C sendpacket myerr
g++ -o linkthread.o -lnet -c linkthread.C sendpacket.o
myerr.o:myerr.h myerr.C
g++ -o myerr -c myerr.C myerr.h
sendpacket.o:sendpacket.h sendpacket.C md5.o
g++ -o sendpacket.o -lnet md5.o -c sendpacket.C sendpacket.h
md5.o:md5.c md5.h
g++ -o md5.o -c md5.c md5.h
make之后,悲剧发生了:
cc sendpacket.o -o sendpacket
/usr/lib/gcc/i486-linux-gnu/4.4.1/../../../../lib/crt1.o: In function `_start':
/build/buildd/eglibc-2.10.1/csu/../sysdeps/i386/elf/start.S:115: undefined reference to `main'
sendpacket.o: In function `SendFindServerPacket(libnet_context*)':
sendpacket.C:(.text+0x11a): undefined reference to `libnet_write_link'
sendpacket.o: In function `SendNamePacket(libnet_context*, unsigned char const*)':
sendpacket.C:(.text+0x28a): undefined reference to `l_name'
sendpacket.C:(.text+0x301): undefined reference to `MD5Init(MD5_CTX*)'
sendpacket.C:(.text+0x31e): undefined reference to `MD5Update(MD5_CTX*, unsigned char*, unsigned int)'
sendpacket.C:(.text+0x333): undefined reference to `MD5Final(unsigned char*, MD5_CTX*)'
sendpacket.C:(.text+0x3fa): undefined reference to `l_name'
sendpacket.C:(.text+0x451): undefined reference to `libnet_write_link'
sendpacket.o: In function `SendPasswordPacket(libnet_context*, unsigned char const*)':
sendpacket.C:(.text+0x4bc): undefined reference to `l_password'
sendpacket.C:(.text+0x597): undefined reference to `MD5Init(MD5_CTX*)'
sendpacket.C:(.text+0x5b4): undefined reference to `MD5Update(MD5_CTX*, unsigned char*, unsigned int)'
sendpacket.C:(.text+0x5c9): undefined reference to `MD5Final(unsigned char*, MD5_CTX*)'
sendpacket.C:(.text+0x6ad): undefined reference to `l_password'
sendpacket.C:(.text+0x73e): undefined reference to `libnet_write_link'
sendpacket.o: In function `SendEndCertPacket(libnet_context*)':
sendpacket.C:(.text+0x7e7): undefined reference to `libnet_write_link'
sendpacket.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
make: *** [sendpacket] 错误 1
我很奇怪,
MD5Final等几个函数已经在md5.h中有声明,在md5.c中有定义,而libnet_write_几个函数也是在libnet库中有实体,我这个Makefile中该依赖的都已经依赖了,为什么还是出现这种错误呢?