静态库是编译器生成的一系列对象文件的集合。链接一个程序时用库中的对象文件还是目录中的对象文件都是一样的。库中的成员包括普通函数,类定义,类的对象实例等等。静态库的另一个名字叫归档文件(archive),管理这种归档文件的工具叫 ar 。
在下面的例子中,我们先创建两个对象模块,然后用其生成静态库。
头文件 say.h 包含函数 sayHello() 的原型和类 Say 的定义:/* 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);
};
下面是文件 say.cpp 是我们要加入到静态库中的两个对象文件之一的源码。它包含 Say 类中 sayString() 函数的定义体;类 Say 的一个实例 librarysay 的声明也包含在内:/* say.cpp */
#include "say.h"
void Say::sayString()
{
std::cout << string << "\n";
}
Say librarysay("Library instance of Say");
源码文件 sayhello.cpp 是我们要加入到静态库中的第二个对象文件的源码。它包含函数 sayhello() 的定义:/* sayhello.cpp */
#include "say.h"
void sayhello()
{
std::cout << "hello from a static library\n";
}
下面的命令序列将源码文件编译成对象文件,命令 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 中的代码:/* 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);
}
该程序可以下面的命令来编译和链接:
$ 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
分享到:
相关推荐
下面就分别总结下linux下生成并使用静态库与动态库的方法:(由于是C++项目,所以编译器用的g++,但是与gcc的使用是相通的) 首先是准备工作,把我们需要封装成库文件的函数的头文件与源文件写好,如下: //myAPI.h...
linux下g++编译与使用静态库和动态库
windows下使用g++编译的opencv,include和lib文件在install文件夹下
g++中的局部静态变量的初始化机制及线程安全
创建静态库(.a)通过上面的流程可以知道,Linux创建静态库过程如下:l 首先,将代码文件编译成目标文件.o(StaticMath.o)g++ -c Sta
VS2015下编译的wxWidgets静态库3.1.0,可用平台为v140_xp,支持winxp与win7以上版本。
使用yum安装g++,软件开发,C语言开发,C++开发。
windows开发环境goLand开发工具调用gcc、g++编译生成的静态库文件 使用gcc对.cpp文件编译生成.o文件、g++对.c文件编译生成.o文件 执行命令ar -crsv libhello.a *.o生成.a静态库文件
g++源码,标准库源码,标准模板库源码,深入研究STL必备,g++8.1.0源代码,好好看看吧,学到不少姿势,我看了一个星期吧,还没完全懂,继续学习.
一个简单的学习案例---包含了makefile文件。如有问题,可惜联系我!一起学习
c++ C++_使用g++编译cpp工程.pdf
Make自动化编译工具-编译静态库与动态库 MD Document:2/28/2016 2:23:09 AM by Jiimbowhy CSDN PuBLiSh:http://blog.csdn.net/winsenjiansbomber/article/details/50758180 在软件开发过程中,编译程序有时会成为一...
解压,把bin目录添加到path环境变量即可。这样就能找到gcc.exe, g++.exe
就是从g++4.5上摘下来的。。。。。。
gcc g++ 离线安装包
g++7.5.0版本,用于ubuntu、kylin离线安装g++,安装包为deb,执行安装命令即可,无需加载任何依赖库
适合无网环境安装GCC与G++,版本为:4.8.5. 压缩包内置安装脚本:install.sh。运行即可完成安装。 方便快捷有效,可以避免各类依赖的困扰。 ---- 适合无网环境安装GCC与G++,版本为:4.8.5. 压缩包内置安装脚本:...
g++编译命令选项.本文讨论GNU编译器集合(GCC)中的C++编译器(g++)的典型用法,主要是指命令行选项的构造。GCC的C++编译器正常安装后,可以使用g++或c++命令执行。
GCC静态库和共享库的生成及调用 GCC静态库和共享库的生成及调用