静态库创建与链接
1、静态库的创建
(1)编写源文件
(2)g++ -c xxx.cpp编译生成 目标文件
(3)使用ar命令将目标文件归档生成静态库
ar -crv libfile_operation.a file_operation.o
选项说明:
c 如果需要生成新的库文件,不要警告
r 代替库中现有的文件或者插入新的文件
v 输出详细信息
ar -t libfile_operation.a查看该静态库中包含的目标文件
2、静态库的链接
g++ main.cpp -L. -lfile_operation
-L指定搜索库的路径,这里指定了当前目录
-l指定链接库的名称
3、示例
(1)源文件
头文件
#include <stdio.h>
#include <string>
#include <stdint.h>
#include <errno.h>
#include <string.h>
using namespace std;
class CFileOperation
{
public:
//指定文件路径的构造函数
CFileOperation(string file_path);
//析构函数
~CFileOperation();
//打开文件
int open_file();
//关闭文件
int close_file();
//写数据
int write_data(const char* buf, const uint32_t write_length);
//读数据
int read_data(char* &buf, const uint32_t read_length);
//指定偏移量
int seek_offset(uint32_t offset);
private:
//默认构造函数
CFileOperation();
private:
FILE* file_fd_;
//文件路径
string file_path_;
};
源文件
#include "file_operation.h"
//构造函数
CFileOperation::CFileOperation(string file_path):
file_fd_(NULL),
file_path_(file_path){}
//析构函数
CFileOperation::~CFileOperation()
{
if(file_fd_ != NULL)
{
fclose(file_fd_);
file_fd_ = NULL;
}
}
//打开或创建文件
int CFileOperation::open_file()
{
FILE* file = fopen(file_path_.c_str(), "wb+");
if(NULL == file)
{
printf("fopen file %s error, err:%s\n", file_path_.c_str(), strerror(errno));
return -1;
}
file_fd_ = file;
return 0;
}
//关闭文件
int CFileOperation::close_file()
{
if(NULL != file_fd_)
{
fclose(file_fd_);
file_fd_ = NULL;
}
return 0;
}
//写数据
int CFileOperation::write_data(const char* buf, const uint32_t write_length)
{
size_t write_ret = fwrite(buf, 1, write_length, file_fd_);
if(write_ret != write_length)
{
printf("write data error, write_ret = %u\n", (uint32_t)write_ret);
return -1;
}
return 0;
}
//读数据
int CFileOperation::read_data(char* &buf, const uint32_t read_length)
{
buf = new char[read_length];
if(NULL == buf)
{
printf("read data new buf error\n");
return -1;
}
size_t read_ret = fread(buf, 1, read_length, file_fd_);
if(read_ret != (size_t)read_length)
{
printf("read data error, read_ret = %u %s\n", (uint32_t)read_ret, strerror(errno));
delete[] buf;
buf = NULL;
return -1;
}
return 0;
}
//指定偏移量
int CFileOperation::seek_offset(uint32_t offset)
{
if(0 != fseek(file_fd_, (long)offset, SEEK_SET))
{
printf("fseek error\n");
return -1;
}
return 0;
}
(2)编译生成目标文件
(3)归档生成静态库
(4)静态库链接