C语言vs怎么使用自己做的静态库与动态库,本人小白,请求详解1.静态链接库
打开VS2010,新建一个项目,选择win32项目 , 点击确定,选择静态库这个选项,预编译头文件可选可不选 。
在这个空项目中,添加一个.h文件和一个.cpp文件 。名字我们起为static.h和static.cpp
static.h文件:
[cpp] view plaincopy
#ifndef LIB_H
#define LIB_H
extern "C" int sum(int a,int b);
#endif
static.cpp文件:
[cpp] view plaincopy
#include "static.h"
int sum(int a,int b)
{
return a b;
}
编译这个项目之后,会在debug文件夹下生成static.lib文件 , 这个就是我们需要的静态链接库 。
下面说明如何调用静态链接库 。
首先需要新建一个空项目,起名为test 。将之前static项目下的static.h和static.lib这个2个文件复制到test项目的目录下,并在工程中加入static.h文件 。
新建一个test.cpp文件如下:
[cpp] view plaincopy
#include stdio.h
#include stdlib.h
#include "static.h"
#pragma comment(lib,"static.lib")
int main()
{
printf("%d\n",sum(1,2));
system("pause");
return 0;
}
编译运行可得结果:3
#pragma comment(lib,"static.lib"),这一句是显式的导入静态链接库 。除此之外,还有其他的方法,比如通过设置路径等等,这里不做介绍 。
2.动态链接库
和创建静态链接库一样,需要创建一个空的win32项目,选择dll选项 。创建dynamic.cpp和dynamic.h文件
dynamic.h文件:
[cpp] view plaincopy
#ifndef DYNAMIC
#define DYNAMIC
extern "C" __declspec(dllexport)int sum(int a, int b);
#endif DYNAMIC
dynamic.cpp文件:
[cpp] view plaincopy
#include "dynamic.h"
int sum(int a, int b)
{
return a b;
}
编译这个项目,会在debug文件夹下生成dynamic.dll文件 。
下面介绍如何调用动态链接库,这里讲的是显式的调用 。
在刚才的test项目下,把static.lib和static.h文件删除,把dynamic.h和dynamic.dll复制到该目录下,并在项目中添加dynamic.h文件,修改test.cpp文件为:
[cpp] view plaincopy
#include stdio.h
#include stdlib.h
#includeWindows.h
#include "dynamic.h"
int main()
{
HINSTANCE hDll=NULL;
typedef int(*PSUM)(int a,int b);
PSUM pSum;
hDll = LoadLibrary(L"dynamic.dll");
pSum = (PSUM)GetProcAddress(hDll,"sum");
printf("%d\n",pSum(1,2));
system("pause");
FreeLibrary(hDll);
return 0;
}
编译运行结果为:3
特别提示:
1.extern "C"中的C是大写,不是小写
2.如果从VS2010中直接运行程序 , lib和dll需要放到test项目的目录下;如果想双击项目test下的debug文件中的exe文件直接运行的话,需把lib和dll放入debug文件夹下 。
c语言调用库函数用什么命令您好,很高兴回答您的问题 。
在c语言中,专门建立有一组需要经常使用、但是编写起来不太简单的函数,系统把这些功能载入到软件内容 。普通用户所需要使用时 , 只需要按照规定输入正确的调用语句,即可打开并运行谢谢文件 。打开的格式为#include对应文件名,如打开输入输出函数为#includestdio. h 。
c语言静态函数调用问题楼上只说对一半,这里能调用a和b两个函数确实是因为使用include把a.cpp和b.cpp加入到了main.cpp里面,使用include实际是把对应代码加到include的位置 。真正做项目没有这样做的,都是使用头文件的方式;
static修饰的函数和变量在别的文件是绝对不可见的,这是楼上错误的地方,即使使用extern声明函数导出,也不可以,编译时根本就不能通过,会报static类型错误 , 不能导出 。。。
在你原来文件结构上加入头文件:
//a.h
#include iostream
using namespace std;
void a();
//b.h
void b();
然后把main.cpp里面的2个include分别改成a.h和b.h,编译:gmain.cpp a.cpp b.cpp会发现报错误:
a.cpp: In function ‘void a()’:
a.cpp:3: error: ‘void a()’ was declared ‘extern’ and later ‘static’
a.h:3: error: previous declaration of ‘void a()’
这里就是因为a函数是static类型,不能导出,把static去掉这里就可以编译通过了 。。。。
这也是static其中一个用法
C语言中 其他文件可否调用文件中的static函数?不能 。
C语言中的static函数:
内部函数和外部函数
函数一旦定义后就可被其它函数调用 。但当一个源程序由多个源文件组成时,在一个源文件中定义的函数能否被其它源文件中的函数调用呢 。为此 , C语言又把函数分为两类:
一、内部函数
如果在一个源文件中定义的函数只能被本文件中的函数调用,而不能被同一源程序其它文件中的函数调用 , 这种函数称为内部函
数 。定义内部函数的一般形式是:static 类型说明符 函数名(形参表)。
例如:
staticintf(inta,intb) 内部函数也称为静态函数 。但此处静态static 的含义已不是指存储方式,而是指对函数的调用范围只局限于本文件 。因此在不同的源文件中定义同名的静态函数不会引起混淆 。
二、外部函数
外部函数在整个源程序中都有效,其定义的一般形式为:extern类型说明符函数名(形参表)例如:
externintf(inta,intb)如在函数定义中没有说明extern或static则隐含为extern 。在一个源文件的函数中调用其它源文件中定义的外部函数时,应用extern说明被调函数为外部函数 。例如:
F1.C(源文件一)
main()
{ externintf1(inti);/*外部函数说明 , 表示f1函
数在其它源文件中*/ …… }
F2.C(源文件二)
externintf1(inti);/*外部函数定义*/
{ …… }
【c语言调用静态库的函数名 调用静态库的方法】关于c语言调用静态库的函数名和调用静态库的方法的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 相亲女在抖音开直播的主播,相亲女在抖音开直播的主播叫什么
- jquery权威指南2PDF,jquery教程推荐
- 7200转硬盘坏了怎么修,7200转硬盘写入速度是多少
- 选择安装路由器怎么选,路由器什么安
- c语言中如果定义函数 在c语言中定义函数
- grok过滤html标签,html符号过滤类
- 能开90帧的百元安卓平板,可以开90帧的安卓平板
- 运营直播茂隆,运营直播间什么意思
- go语言使用什么进行开发 go语言开源吗