当前位置: 技术问答>linux和unix
编译静态类,使用时出现问题
来源: 互联网 发布时间:2015-10-26
本文导语: 我是这样的: g++ -Wall -c add.c ar -crv libadd.a add.o 请注意:add.c 文件里包含着类class Adding , 编译通过,但是在使用时、连接libadd.a时出现了 class Adding 没定义的错误,请问怎回事呢? 应该如何改进,请帮...
我是这样的:
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
没定义,请问怎么呢?谢谢!!!!!!!
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
没定义,请问怎么呢?谢谢!!!!!!!
|
试过ranlib没有?
没有用ranlib整理一下符号表是不行的
没有用ranlib整理一下符号表是不行的
|
*.a实际上可以看作是一系列*.o文件的集合,使用起来和*.o文件一样。用-l引入是8对的。
|
偶不知道这么多
只知道
gcc -o target -lsomelib my.o others.a
这样可以使用。
从来没有见过g++ a.cpp -ladd这样的写法,偶狂汗,知识太有限,解决不了,走了。
只知道
gcc -o target -lsomelib my.o others.a
这样可以使用。
从来没有见过g++ a.cpp -ladd这样的写法,偶狂汗,知识太有限,解决不了,走了。
|
研究研究
|
.a可以用-l引入,在不同系统中的引入方式不同。在Linux下一般是先查找-l后的.so,如果找不到就会去找.a。如果要强制不去找.so,可以在-l前面加入-static参数。
|
所以现在的问题首先需要看连接的到底是.so还是这个.a。
|
是g++ a.cpp -ladd 这种写法有问题吧?
我觉得应该是g++ a a.cpp -ladd
我觉得应该是g++ a a.cpp -ladd
|
1. g++ a.cpp libadd.a
2. g++ a.cpp -L./ -ladd(-L后应该是你的libadd.a所在的路径)
这两种情况都假设a.cpp和libadd.a在同一个目录下
2. g++ a.cpp -L./ -ladd(-L后应该是你的libadd.a所在的路径)
这两种情况都假设a.cpp和libadd.a在同一个目录下
|
ar完还要ranlib一下, 具体 man 一下!
|
应该是你的静态库的问题,你仔细查查静态库的源码