当前位置:  技术问答>linux和unix

第一次使用动态库链接出现undefined referenced to...

    来源: 互联网  发布时间:2016-09-20

    本文导语:  我不会写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...

我不会写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中该依赖的都已经依赖了,为什么还是出现这种错误呢?

|
一般都会产生一个链接文件:
ln -s libnet.so.1.5.0 libnet.so.1
有的还会有
ln -s libnet.so.1 libnet.so

|
cc sendpacket.o -o sendpacket
看明白了,出现这么一行,是因为楼主的第一行里面写了个sendpacket(少了.o) ,但是又没写如何生成sendpacket这个文件,所以make就根据默认规则自作主张了。

|
对于简单的情况:在没有Makefile文件的情况下,先手动执行那些编译命令,例如你的:
g++ -o linkthread.o -lnet -c linkthread.C sendpacket.o等等
先手动执行没有问题了,再去写Makefile文件。

|
你的libnet.so文件在哪个目录下?把这个目录用-L选项加到你的LDFLAGS中
例如:
LDFLAGS +=-lnet -lpcap -L/usr/local/net

|
本帖最后由 wenxy1 于 2010-08-19 10:15:12 编辑
# Makefile

LDFLAGS += -lnet

bins := sendpacket myerr

objs := sendpacket.o myerr.o linkthread.o md5.o

all : $(bins)

clean :
    -rm -f $(bins) $(objs)

|
cc sendpacket.o -o sendpacket
楼主的makefile里没有这个命令,为什么会执行它?

libnet库在什么地方?
是否需要用-L参数指定他所在的路径?

|
linkthread.o:linkthread.C sendpacket.o myerr.o

g++ -o myerr.o -c myerr.C 

g++命令行里面所有的.h文件都要删掉。
注意.c文件名大小写

|
1、你的代码中没有main()函数。
2、你的目标是什么?是要生成可执行文件还是函数库?
3、给个简单的Makefile给你参考(用于生成动态库的)

library:libLIB_API.so
LIB_API.o:LIB_API.cpp
    g++ -c -fpic LIB_API.cpp
libLIB_API.so:LIB_API.o
    g++ -shared LIB_API.o -o libLIB_API.so
clean:
    rm *.o
    rm libLIB_API.so

|
linkthread.o:linkthread.C sendpacket.o myerr.o
    g++ -o linkthread.o -lnet -c linkthread.C sendpacket.o myerr.o
myerr.o:myerr.h myerr.C
    g++ -o myerr.o -c myerr.C
sendpacket.o:sendpacket.h sendpacket.C md5.o
    g++ -o sendpacket.o -lnet md5.o -c sendpacket.C
md5.o:md5.c md5.h
    g++ -o md5.o -c md5.c

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 今天第一次用downloader for x,出现怪问题!
  • 求助:第一次装apache+php,运行站点出现403错误!
  • 我装好红旗LINUX了,第一次启动出现localhost login:,请问应该输入什么
  • 我今天第一次安装 Redhat7.1 却出现了一个怪问题
  • 第一次装linux5.0,光盘启动后按enter就出现Uncompressing Linux... Ok, booting the kernel.谁知道阿
  • 今天第一次接触linux和gcc,看了点资料,试着编译一个源程序,却出现找不到库文件
  • 第一次装sco unix出现的问题!
  • 在线等!如何用bash实现:在一个文件中查找某个字符串,只保留该字符串的第一次出现,剩下的全部删除?
  • 我在JB中编写Servlet,为什么在第一次请求时,其会再调用init()?
  • 如何让用户第一次登录时必须更改密码?
  • 求助!第一次使用gdb,出问题不懂怎么解决
  • 第一次起qt的程序,很慢,谁知道是什么原因么?
  • 在第一次使用kde时设置中文,怎样再改回英文?
  • 第一次安装solaris需要注意什么
  • 第一次装linux遇到的问题
  • 求助,firefox安装flash的问题,第一次发贴
  • 为什么linux下第一次查找慢些?
  • 在一个类中的static方法是不是只有在第一次调用类的时候才运行?
  • 第一次弄LINUX,关于CRONTAB的!在线求助!!
  • sed 替换指定行的匹配字符串,第一次发帖。
  • jsp调用EJB,第一次能查询记录,以后怎不行拉?
  • applet将他嵌入到一个网页中,第一次运行结果显示都正确,可是.....
  • 我第一次来,怎么送分数阿
  • 第一次来这里散分。
  • 第一次用Linux,有小问题要问
  • 第一次进java论坛,希望能够得到大家的帮助,以后多多指教。
  • 第一次装RED HAT9。0,打击真是大啊!
  • 第一次装linux,请教?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3