linux下使用g++编译cpp工程的方法

2020-03-26 11:57:28王旭

在下面的例子中,我们先创建两个对象模块,然后用其生成静态库。

头文件 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 libraryn";
 }
 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 libraryn";
 }

下面的命令序列将源码文件编译成对象文件,命令 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下使用g++编译cpp工程的文章就介绍到这了,更多相关linux g++编译cpp内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!