vs2019生成静态库以及静态库的引用(C引用C++,C++引用C)保姆级教程

目录

一.如何制作一个静态库

二.C++如何引用C的静态库和C如何引用C++的静态库(跨语言问题)


一.如何制作一个静态库

        注意:!!!!!如果你的静态库是C语言编写的,仅仅经过下述操作,你引用这个静态库也得是在C语言的环境下,如果你的静态库是C++写的,你引用这个静态库也得在C++的环境下

1.打开vs2019,选择静态库


 2.选择静态库并创建

 3.选择属性->C++->预编译头->不使用预编译头

4.这个时候把IDE给你创建好的文件全部删除,我们先不使用他们

 5.写自己的代码(不用包含main函数,因为我们不用让他跑起来),比如说,举一个例子吧,我来给一段代码,这段代码大致作用是初始化一个栈和打印栈的信息,为了方便看到现象,我在初始化的时候给栈里的元素赋了值,所以打印出来的大致效果是

0->1->2->3->4->5->6->7->8->9->

Stack.h

#pragma once
#include<stdio.h>
#include<stdlib.h>

typedef struct stack
{
	int* data;
	int capacity;
	int top;
}stack;

#define INIT 10

void InitStack(stack* ps);
void Print_Stack(stack ps);

Stack.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"Stack.h"

void InitStack(stack* ps)
{
	ps->data = (int*)malloc(sizeof(int) * INIT);
	if (ps->data == NULL)
	{
		perror("malloc::");
		return;
	}
	ps->top = 0;
	ps->capacity = INIT;
	int i = 0;
	while (i < INIT)
	{
		ps->data[ps->top] = i;
		i++;
		ps->top++;
	}
}

void Print_Stack(stack ps)
{
	int i = 0;
	while (i < ps.top)
	{
		printf("%d->", ps.data[i]);
		i++;
	}
}

        代码写完了检查无误,我们点击生成解决方案,如果你的代码没有问题,就可以在工程文件夹的Debug目录下找到刚刚生成的.lib文件

         如图所示

 

        那么我们怎么使用这个静态库呢,我们可以新建的工程,先包含我们刚才生成静态库所用到的.h(不用非得回以前的工程文件找,只要是这个.h就行)

         第二步找到项目的属性

         在属性里的链接器的附加库目录中添加你.lib文件的根目录(就是我们刚才静态库里包含.lib的那个Debug文件夹)

         然后在输入里加入你的.lib文件的名称,比如我生成的.lib文件就叫Stack.lib

         好了,至此我们就可以使用这个库里所包含的一些结构体和函数了,如图,我们代码可以正常运作了

 二.C++引用C的静态库和C引用C++的静态库

        假设我们引用静态库我们的源文件是.cpp,而我们的静态库是.c的文件,这个时候我们会发现有报错。

         这个是因为在编译器中,C++和C的函数命名规则不同,所以我们引用.h文件的时候,假设我们引用静态库的工程是C语言编写的(同时静态库是由C++编写的),编译的时候就会默认按照C的方式来编译函数名,所以就找不到C++的静态库编译后的函数名称,同理,引用静态库的工程是C++语言编写的(同时静态库是由C编写的),编译的时候就会默认按照C++的方式来编译函数名,所以就找不到C的静态库编译后的函数名称,为了解决这个问题最中心的思想是记住一点,动.cpp文件。

        以下分为两种情况:
1.如果静态库是用C语言编写,引用的工程文件是由C++编写

        只需要在引用头文件的前后加上extern “C”,这个时候默认展开这个.h头文件时编译函数名就会按照C的规则去编译函数名称

 

2.如果静态库是用C++编写,引用的工程是由C语言编写

        这个时候我们需要去改变C++静态库的头文件中的内容,如图所示。

        问题迎刃而解 

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荞麦壳枕头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值