zoukankan      html  css  js  c++  java
  • 静态库创建与链接

    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
    ", 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
    ", (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
    ");
    		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
    ", (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
    ");
    		return -1;
    	}
    
    	return 0;
    }

    (2)编译生成目标文件

    (3)归档生成静态库

    (4)静态库链接

  • 相关阅读:
    解决Windows 7 IIS7.5 用户 'IIS APPPOOL{站点名} AppPool'登录失败
    解决WebClient或HttpWebRequest首次连接缓慢问题
    VB 十六进制转汉字的函数
    xshell的常用命令
    javaweb项目添加log4j日志
    java中的事务
    eclipse中给方法加说明的快捷键
    eclipse中竖行选择代码的快捷键
    java中如何自动获取电脑的ip地址
    javaweb项目启动时自动启动rmi服务器实例
  • 原文地址:https://www.cnblogs.com/fangyan5218/p/10618246.html
Copyright © 2011-2022 走看看