+ -
当前位置:首页 → 问答吧 → C++类做成静态链接库

C++类做成静态链接库

时间:2011-12-02

来源:互联网

请问是不是只有放在cpp文件里的函数才能生成到静态链接库中呀,例如
test.h

class A
{
  void test();
  void test2()
  {
  cout << "test2" << endl;
  }
}

test.cpp

void A::test()
{
  cout << "test" << endl;
}

生成的库中是不会有A::test的,对吗?

作者: yusss   发布时间: 2011-12-02

写错了,
生成的库中是不会有A::test的,对吗?
应为
生成的库中是不会有A::test2的,对吗?

作者: yusss   发布时间: 2011-12-02

不懂,我觉得应该没有

作者: agoago_2009   发布时间: 2011-12-02

会有A::test2的

作者: Rotaxe   发布时间: 2011-12-02

都会有的
不管是.h中或者是cpp中的接口,都是要在外部调用的时候才会开始链接,一样的你得包含接口中的声明头文件
如果头文件里的接口不会编译到lib中去,那估计所有的开发者都会将lib中接口的实现直接放头文件了以减轻lib文件的体积了

作者: stormlk1983   发布时间: 2011-12-02

引用 4 楼 stormlk1983 的回复:

都会有的
不管是.h中或者是cpp中的接口,都是要在外部调用的时候才会开始链接,一样的你得包含接口中的声明头文件
如果头文件里的接口不会编译到lib中去,那估计所有的开发者都会将lib中接口的实现直接放头文件了以减轻lib文件的体积了

如果把h文件改成hpp文件呢?

作者: yusss   发布时间: 2011-12-02

引用 2 楼 agoago_2009 的回复:

不懂,我觉得应该没有

我的意思是:
lib文件中两个函数都有,但是调用 test2() 时会出错吧;

作者: agoago_2009   发布时间: 2011-12-03

1.只要你#include <test.h>
  A::test1();A::test2();
  在lib中都会有,且都可以正常使用
2.就我所知,除模板类,声明/定义不能写在2个文件中以外,其它的,用include相当于一个文件
3..h及.hpp无区别,就是用其它后缀也是可以的

作者: keiy   发布时间: 2011-12-03