个人工具
登录
查看“Compiling Cpp”的源代码 - Ubuntu中文
页面
讨论
查看源代码
历史
搜索
导航
首页
最近更改
随机页面
页面分类
帮助
编辑
编辑指南
沙盒
新闻动态
字词处理
工具
链入页面
相关更改
特殊页面
页面信息
查看“Compiling Cpp”的源代码
来自Ubuntu中文
←
Compiling Cpp
跳转至:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
== 创建静态库 == 静态库是编译器生成的一系列对象文件的集合。链接一个程序时用库中的对象文件还是目录中的对象文件都是一样的。库中的成员包括普通函数,类定义,类的对象实例等等。静态库的另一个名字叫归档文件(archive),管理这种归档文件的工具叫 ar 。 在下面的例子中,我们先创建两个对象模块,然后用其生成静态库。 头文件 say.h 包含函数 sayHello() 的原型和类 Say 的定义: <source lang="c"> /* say.h */ #include <iostream> void sayhello(void); class Say { private: char *string; public: Say(char *str) { string = str; } void sayThis(const char *str) { std::cout << str << " from a static library\n"; } void sayString(void); }; </source> 下面是文件 say.cpp 是我们要加入到静态库中的两个对象文件之一的源码。它包含 Say 类中 sayString() 函数的定义体;类 Say 的一个实例 librarysay 的声明也包含在内: <source lang="c"> /* say.cpp */ #include "say.h" void Say::sayString() { std::cout << string << "\n"; } Say librarysay("Library instance of Say"); </source> 源码文件 sayhello.cpp 是我们要加入到静态库中的第二个对象文件的源码。它包含函数 sayhello() 的定义: <source lang="c"> /* sayhello.cpp */ #include "say.h" void sayhello() { std::cout << "hello from a static library\n"; } </source> 下面的命令序列将源码文件编译成对象文件,命令 ar 将其存进库中: $ g++ -c sayhello.cpp $ g++ -c say.cpp $ ar -r libsay.a sayhello.o say.o 程序 ar 配合参数 -r 创建一个新库 libsay.a 并将命令行中列出的对象文件插入。采用这种方法,如果库不存在的话,参数 -r 将创建一个新的库,而如果库存在的话,将用新的模块替换原来的模块。 下面是主程序 saymain.cpp,它调用库 libsay.a 中的代码: <source lang="c"> /* saymain.cpp */ #include "say.h" int main(int argc,char *argv[]) { extern Say librarysay; Say localsay = Say("Local instance of Say"); sayhello(); librarysay.sayThis("howdy"); librarysay.sayString(); localsay.sayString(); return(0); } </source> 该程序可以下面的命令来编译和链接: $ g++ saymain.cpp libsay.a -o saymain 程序运行时,产生以下输出: hello from a static library howdy from a static library Library instance of Say Local instance of Say
返回至
Compiling Cpp
。