静态库创建与链接

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)静态库链接

posted @ 2019-03-17 21:03  落影无痕  阅读(241)  评论(0编辑  收藏  举报