c++小牛钱小白

c++中g++中静态库的创建与使用在实战中的应用??

# 创建静态库

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

#头文件 say.h 包含函数 sayHello() 的原型和类 Say 的定义:

#say.h 指针定义用char *string,为什么不能用string类型??

cat>>say.h<<EOF

/* 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);

};

EOF

#下面的文件 say.cpp 是我们要加入到静态库中的两个对象文件之一的源码。它包含 Say 类中 sayString() 函数的定义体;类 Say 的一个实例 librarysay 的声明也包含在内:

# say.cpp

cat>>say.cpp<<EOF

#include "say.h"

void Say::sayString()

{

std::cout << string << "\n";

}

Say librarysay("Libraray instance of Say");

EOF

#下面源码文件 sayhello.cpp 是我们要加入到静态库中的第二个对象文件的源码。它包含函数 sayhello() 的定义:

#sayhello.cpp

cat>>sayhello.cpp<<EOF

#include "say.h"

void sayhello()

{

// 结尾添加 << endl 报错??为什么??

std::cout << "hello from a static library\n";

}

EOF

#下面的命令序列将源码文件编译成对象文件,命令 ar 将其存进库中:

g++ -c sayhello.cpp;

g++ -c say.cpp;

# 程序 ar 配合参数 -r 创建一个新库 libsay.a 并将命令行中列出的对象文件插入。采用这种方法,如果库不存在的话,参数 -r 将创建一个新的库,而如果库存在的话,将用新的模块替换原来的模块。

ar -r libsay.a sayhello.o say.o;


#下面是主程序 saymain.cpp,它调用库 libsay.a 中的代码:

cat>>saymain.cpp<<EOF

/* 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);

return 0;    // return 0与上面返回方式有什么区别??

}

EOF

g++ saymain.cpp libsay.a -o saymain;    # 编译并链接生成可执行文件 

ls -lh


sh saymain;    # 在shell环境中运行时报错??或者在c++环境中运行试试??Syntax error: Unterminated quoted string??


评论
© c++小牛钱小白 | Powered by LOFTER