c++动态链接库及静态链接库的生成与使用

1,新建控制台工程xdltest,改属性-配置属性-常规-配置类型为 动态库.dll或静态库.lib
2,打开工程后添加 dltest.h, dltest.cpp,其中.h与.cpp名字没必要一样
3,编写代码
----------------------------------------------
--dltest.h
#pragma once
_declspec(dllexport) void Print(const char* str);

----------------------------------------------
--dltest.cpp
#include<iostream>
#include"dltest.h"
void Print(const char* str)
{
std::cout << "dltest>> " << str << std::endl;
}

4,编译,生成 <库的名字是根据工程名生成的>
若是静态库,则会生成 xdltest.lib.
若是动态链接库则生成 xdltest.lib 和 xdltest.dll

5,使用
(1)将xdltest.lib添加到 <属性-配置属性-链接器-输入-附加依赖项>
(2)在<属性-配置属性-链接器-常规-附加库目录>中指定xdltest.lib的目录
(3)在<属性-配置属性-c/c++-常规-附加包含目录>中指定dltest.h的目录
(4)在程序中 #include "dltest.h" 后即可使用Print("hello")输出了

下面有三种方式使用库函数
-----------------------------------------
--使用方式一
#include "stdafx.h"
#include "abc.h" //包含库的头文件

int main()
{
Print("hello,world");
return 0;
}
-----------------------------------------
--使用方式二
#include "stdafx.h"
void Print(const char* str); //声明库中的函数,使编译通过

int main()
{
Print("hello,world");
return 0;
}
-----------------------------------------
--使用方式三
#include "stdafx.h"
_declspec(dllimport) void Print(const char* str); //从库中导入进工程

int main()
{
Print("hello,world");
return 0;
}
6,运行
若是动态链接库则必须把dll文件拷到exe目录下才能运行

原理:
.h文件用于编译,使程序在语法上检测通过,利用这个原理,
可以不使用.h文件而直接将需要使用的库函数在使用前声明出来
.lib文件用于链接,若是静态链接库,直接将函数实现写入了exe中,
若是动态链接则是在exe中留下函数签名并标记它是运行时动态加载的

------------------------------------------------------------------------------------------------------

需要注意的是:

1,C#只能调用 C/C++的DLL,而不能调用lib,

2,C++生成的DLL中,函数名被改了(各编译器而不同),而C#调用C++ DLL时需要指定函数名字,因此会出错,找不到函数

对应方法是:生成C风格的DLL,它的函数是没改名字的。

C风格的DLL中函数声明加上 exterun "C",如:

exterun "C" _declspec(dllexport) void Print(const char* str);

posted on 2018-07-27 18:45 时空观察者9号 阅读(...) 评论(...) 编辑 收藏

c++动态链接库及静态链接库的生成与使用相关推荐

  1. Linux下Makefile中动态链接库和静态链接库的生成与调用

    背景:写这篇博客的原因是:最近在搞嵌入式,需要交叉编译opencv库文件,自己写Makefile,通过arm-linux-g++编译.链接.生成可执行文件,从而实现了移植的过程.平台是Toradex的 ...

  2. Windows下动态链接库和静态链接库的生成以及调用

    Windows下静态库和动态库的生成和调用 一.简介 二.生成静态链接库(.lib)和动态链接库(.dll) 三.静态链接库的调用 四.动态链接库的调用 动态链接库的两种调用方式 仅使用.dll文件 ...

  3. linux 生成和使用动态链接库和静态链接库的Makefile编写

    引用 Jesse Rei 的 linux 生成和使用动态链接库和静态链接库的Makefile编写 生成和使用动态链接库和静态链接库的Makefile编写 1. 概述 介绍linux下生成和使用动态链接 ...

  4. 动态链接库和静态链接库的区别

    两种库: 一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library. 一种是LIB包含函数 ...

  5. 关于动态链接库和静态链接库

    关于动态链接库和静态链接库 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说库是一种可执行代码的二 ...

  6. C语言函数库:动态链接库与静态链接库

    首先,函数库就是一些事先写好的函数的集合,是别人分享的,我们可以拿来使用的.经过一些校准和整理,就形成一份标准化的函数库.例如glibc 函数库有两种提供形式:动态链接库与静态链接库 早起函数库里的函 ...

  7. 动态链接库与静态链接库的区别

    动态链接库与静态链接库的区别 库文件的概念 库文件是计算机上的一类文件,提供给使用者一些开箱即用的变量.函数或类.库文件分为静态库和动态库,静态库和动态库的区别体现在程序的链接阶段:静态库在程序的链接 ...

  8. 区别动态链接库和静态链接库

    动态链接库和静态链接库: 首先理解两种生成可执行程序的链接方式: 动态链接: 链接动态库,只是在生成的程序中记录库中的函数信息表,并没有将具体代码实现写入程序中,所以依靠动态链接生成的程序在运行时,需 ...

  9. 动态链接库和静态链接库的相互包含问题及实现

    动态链接库和静态链接库的基本概念请参考 1.<深入理解计算机系统>第七章链接 2.<程序员的自我修养>第4章 静态链接和第7章 动态链接 3. http://blog.jobb ...

最新文章

  1. python提取文件名数字_在Python中从文件名提取扩展名
  2. Spring复习笔记:3
  3. ubuntu10.10---用Apache+mod_wsgi部署python程序
  4. 微信python天天学_刚学Python一礼拜!我就能模拟登录微信公众号!我是天才吧!...
  5. 【Spring Boot】1.基础知识
  6. react安装_前端大牛进阶---gt;React必会教程
  7. 技术人员兼职招聘平台HourlyHerd融资2200万美元C轮融资
  8. 如何删除集合(数组)中指定的元素
  9. 华为Mate 40 Pro全新概念图曝光:这设计有点夸张了
  10. 微信公众平台开发者原理图解
  11. 莫烦python学习笔记1
  12. ubuntu 截图工具的使用
  13. SpringBoot Banner图标修改 + 文字生成器
  14. python 多线程爬虫下载中图分类号
  15. 获取pc微信信息_如何获取有关您的PC的详细信息
  16. 华为服务器克隆linux,华为RH2288H V3服务器磁盘阵列配置RAID
  17. DataBinding快速入门(还在用findViewById?)
  18. 【每日一个GitHub项目】GitHub中文排行榜
  19. 1-10-RHEL6.3-linux启动原理及各种故障案例分析(Red Hat Enterprise Linux Server6.3)@树袋飘零...
  20. linux网页制作教程,linux:.htaccess文件使用教程

热门文章

  1. 从个人到团队:思维转变是关键
  2. C#中使用Newtonsoft.Json实现对Json字符串的解析
  3. 集成学习(ensemble learning)(二)
  4. 讲故事的用户故事样例之1
  5. 在Flutter中更快地加载您的图像资源
  6. 服务器相关命令整理[不断更新ing]
  7. 8-15主要复习 1.运算符优先级整体记忆 2.排序算法
  8. python写一个文件下载器_python使用tcp实现一个简单的下载器
  9. arcgis两点之间连线_ArcGIS中实现一种流向地图的方法
  10. 计算机在生命科学中的发展前景,往生命科学领域发展的职业前景