编译静态类,使用时出现问题

afu88 2005-10-09 10:30:27
我是这样的:
g++ -Wall -c add.c
ar -crv libadd.a add.o

请注意:add.c 文件里包含着类class Adding ,
编译通过,但是在使用时、连接libadd.a时出现了
class Adding 没定义的错误,请问怎回事呢?

应该如何改进,请帮忙,谢谢!!!!!!!!

在使用连接libadd.a时,头文件是有包含的,就是
g++ -c a.cpp 能编译通过,但是连接时
g++ a.cpp -ladd 连接libadd.a时就出现了class Adding
没定义,请问怎么呢?谢谢!!!!!!!
...全文
806 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
yingle2000 2005-10-31
  • 打赏
  • 举报
回复
我这里一直是正常的,没有任何问题。
afu88 2005-10-31
  • 打赏
  • 举报
回复
还是不行
afu88 2005-10-21
  • 打赏
  • 举报
回复
ar完后
arm-linux-ranlib libadd.a 成功
编译时:arm-linux-g++ *.cpp -ladd 还是出现下面问题:
出现的连接错误如下:
/tmp/ccceIPX1.o(.text+0x398):undefined reference to 我定义的类成员函数;
/tmp/cclgJJSV.o.......................................................;
/tmp/cck29LCp.o(.text+0x22c):.........................................;
请大家给个解决方法或建议,谢谢!!!!!!!!!!!!!!!!!!!!!
我估计错误出在开始把类编译到libadd.a里面,请帮帮!谢谢!!!!!!!!!


请问应该怎样解决呢?谢谢!!!!!!!!
lqh_wh 2005-10-19
  • 打赏
  • 举报
回复
应该是你的静态库的问题,你仔细查查静态库的源码
zhang_jiang 2005-10-18
  • 打赏
  • 举报
回复
试过ranlib没有?
没有用ranlib整理一下符号表是不行的
zhang_jiang 2005-10-17
  • 打赏
  • 举报
回复
ar完还要ranlib一下, 具体 man 一下!
afu88 2005-10-17
  • 打赏
  • 举报
回复
出现的连接错误如下:
/tmp/ccceIPX1.o(.text+0x398):undefined reference to 我定义的类成员函数;
/tmp/cclgJJSV.o.......................................................;
/tmp/cck29LCp.o(.text+0x22c):.........................................;
请大家给个解决方法或建议,谢谢!!!!!!!!!!!!!!!!!!!!!
我估计错误出在开始把类编译到libadd.a里面,请帮帮!谢谢!!!!!!!!!
afu88 2005-10-17
  • 打赏
  • 举报
回复
谢谢!!!!!!!!!!!!!1
1. g++ a.cpp libadd.a
2. g++ a.cpp -L./ -ladd(-L后应该是你的libadd.a所在的路径)
这两种情况都假设a.cpp和libadd.a在同一个目录下

我已经把libadd.a 和其编译在其中的类.h文件都放到arm-linux的环境
目录下,-ladd ,它应该会去找默认路径下的libadd.a,但是结果还是
找不到class add类的定义。
我觉得应该是在编译class add 到libadd.a 的问题,请大家帮帮,给点意见
谢谢!!!!!!!!!!
lqh_wh 2005-10-17
  • 打赏
  • 举报
回复
1. g++ a.cpp libadd.a
2. g++ a.cpp -L./ -ladd(-L后应该是你的libadd.a所在的路径)
这两种情况都假设a.cpp和libadd.a在同一个目录下
afu88 2005-10-17
  • 打赏
  • 举报
回复
还是搞不定,请大家帮忙,谢谢!!!!!!
afu88 2005-10-13
  • 打赏
  • 举报
回复
你好,我编译生成是*.a 文件,没有*.so
连接时安你说,应该先找.so,再找.a
现在没有.so,它就会去找.a,但是连接还是
编译不过,找不到.a里面的类定义;
yingle2000 2005-10-13
  • 打赏
  • 举报
回复
所以现在的问题首先需要看连接的到底是.so还是这个.a。
yingle2000 2005-10-13
  • 打赏
  • 举报
回复
.a可以用-l引入,在不同系统中的引入方式不同。在Linux下一般是先查找-l后的.so,如果找不到就会去找.a。如果要强制不去找.so,可以在-l前面加入-static参数。
qiulongxiong 2005-10-13
  • 打赏
  • 举报
回复
是g++ a.cpp -ladd 这种写法有问题吧?
我觉得应该是g++ a a.cpp -ladd
LDD123 2005-10-12
  • 打赏
  • 举报
回复
研究研究
afu88 2005-10-12
  • 打赏
  • 举报
回复
呵呵,那假如 ladd 库里包含类呢,应该怎样编译呢?
请指教。。。。。
darkstar21cn 2005-10-11
  • 打赏
  • 举报
回复
偶不知道这么多
只知道
gcc -o target -lsomelib my.o others.a
这样可以使用。
从来没有见过g++ a.cpp -ladd这样的写法,偶狂汗,知识太有限,解决不了,走了。
afu88 2005-10-10
  • 打赏
  • 举报
回复
请大家帮忙!!!!谢谢!!!!!!!!!!!!!!
afu88 2005-10-09
  • 打赏
  • 举报
回复
用-l引入是8对的什么意思呢?如果引出类来呢?
darkstar21cn 2005-10-09
  • 打赏
  • 举报
回复
*.a实际上可以看作是一系列*.o文件的集合,使用起来和*.o文件一样。用-l引入是8对的。

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧