精华内容
下载资源
问答
  • 动态库使用方法

    千次阅读 2011-07-05 17:51:13
    动态库使用方法 工作笔记 1: 怎么编译动态库 详细解释下各个参数的意义 动态库和静态库区别 生成共享库: gcc -share -fPIC -o xx.so ff.c -share : 创建一个共享的目标文件 -fPIC : 指

    动态库使用方法 工作笔记

    1: 怎么编译动态库 详细解释下各个参数的意义 动态库和静态库区别

    生成共享库: gcc -share -fPIC -o xx.so ff.c

    -share : 创建一个共享的目标文件

    -fPIC : 指示编译器生成一个与位置无关的代码 使用共享库:

    gcc -rdynamic -o app -ldl main.c

    -ldl : 使用dl库提供的dlopen 等手动打开动态库 ,如果不手动打开,自然也可以像添加dl 这个库的形式添加需要使用的库

    -rdynamic :

    2: 如果一个app需要多个动态库和静态库,怎么添加它们?

    #####添加多个静态库########

    LD_FLAGS += -Wl,-Bstatic -Wl,--start-group \

    -lsss \

    -lsssss \

    -lmd5 \

    LD_FLAGS += -Wl,--end-group

    ########### DYN LIB ###################

    LD_FLAGS += -Wl,-Bdynamic lskpm \

    -lskshell

    注意关键字

    -Bstatic -Bdynamic -start-group --end-group

    3: 如何查看动态库的依赖关系

    在dlopen 打开库的过程中如果出现file no exit 的错误, 要注意查看库的依赖关系

    4: 如何使用dlopen 这一系列函数, 在使用的过程中要注意什么?

    添加-ldl 库

    5: 实例分析

    模块sktr069 依赖libevent dl 这两个库。 因为在sktr069 中调用了dlopen 来打开自己, 所以sktr060 必须是以动态库的形式集成到skapp 中, 在生成libsktr069.so 动态库的时候, 用了下面命令

    $(CC) -fPIC -shared -o $@ $^

    arm-hismall-linux-gcc -fPIC -shared -o libsktr069.so access_list.o accessor.o add_object.o

    需要注意的是虽然libstr069.so 这个库中调用了libevent . dl 这两个库,但是在生成动态库的时候却不需要 添加这两个库,

    在集成libsktr069.so的时候再链接这两个库就ok了。 其实仔细理解下编译过程,是很好理解的, 《深入理解计算机系统》 第七章上面有很好的解释参考资料http://www.blogjava.net/ThinkingTalking/archive/2010/07/07/325487.html------------------------------------------------------------------------------------------

    注: 以上仅仅是在项目中使用到的。 原理等详细看《CSAPP》 第七章

    展开全文
  • 创建和使用动态库 使用def文件

    万次阅读 2017-08-01 08:53:34
    这个是vs2013自动生成的,但是你在建立项目的时候,选择了空项目,所以就没有,如果没选择空项目就会有这个文件,但是他会包含很多的其他的依赖文件,这里都去除了,我们是要生成一个纯净的动态库, // dl

    打开vs2013 ,文件-新建,取一个名字

    我们这里创建一个空的项目吧

    添加头文件MyDll.h

    源文件

    建立源文件dllmain.cpp,要包含window.h文件,这个是vs2013自动生成的,但是你在建立项目的时候,选择了空项目,所以就没有,如果没选择空项目就会有这个文件,但是他会包含很多的其他的依赖文件,这里都去除了,我们是要生成一个纯净的动态库,

    // dllmain.cpp : 定义 DLL 应用程序的入口点。
    #include <windows.h>
    BOOL APIENTRY DllMain(HMODULE hModule,
        DWORD  ul_reason_for_call,
        LPVOID lpReserved
        )
    {
        switch (ul_reason_for_call)
        {
        case DLL_PROCESS_ATTACH:
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
        }
        return TRUE;
    }

    建立source.def

    在此文件第一行引号中填项目名称就好了,EXPORTS下面表示要生成的函数名称 格式:“名称 @序号”)

    生成解决方案,发现该项目目录下的Debug下生成了文件  dll   lib

      

    2   项目调用库文件的用法

     以同样的方式生成项目,但这次不是选择dll了,控制台程序

    将上面项目的头文件和生成的库文件复制到该项目来

    建立自己的源文件UseDll.cpp  内容是

    有时候需要经文件包含的目录和库文件添加进来

    运行

    测试成功了

    如果我在库文件中这样写

    生成的库文件再拿过来

     

    展开全文
  • VS2015动态库使用示例

    千次阅读 2018-11-04 10:39:06
    已经写好并且可以进行复用的代码,按照链接方式可分为两种 :动态库和静态库。他们在链接时起作用。   静态库:使用静态链接方式,库中的所有数据代码都将拷贝到调用程序的代码空间中去。也就是说你在哪调用了库...

    一、库基础知识

    已经写好并且可以进行复用的代码,按照链接方式可分为两种 :动态库和静态库。他们在链接时起作用。

                     

    静态库:使用静态链接方式,库中的所有数据代码都将拷贝到调用程序的代码空间中去。也就是说你在哪调用了库中的函数,                        它会将被调用的函数的的数据代码全部拷贝到该位置。在链接阶段就直接打包进可执行文件中。

    动态库:用动态链接方式,在链接时dll并不拷贝入最终生成的.exe。在程序运行需要调用dll时,才会加载。

    总之一句话:动态链接相比于静态链接,生成的可执行文件要小,但是运行时调用库所花费的时间要长。

    (好了,让我真刀真枪的干上一场吧哈哈哈)

     

    二、VS2015使用动态库简单示例

    1.打开V2015 -> 建立win32项目

    2.点击下一步

    3.选择DLL->选择导出符号(方便初学者使用) -> 选择下一步(当然附加选项可以选上 导出符号 ,会多一个接口,一般我是自己写接口的)

    4.开始编写一个简单的库例程

    我书写的是一个HELLO函数

    1.在DLL_Project.cpp中添加如下函数内容

    2.在DLL_Project.h中添加如下函数声明

    3.点击生成解决按方案

    出现如下文件,拷贝复制到你需要这个库的工程的可执行文文件同级目录下

    4.添加.lib,点开工程属性->链接器->常规->附加库目录->浏览选择你.lib的路径(当然也可以添加相对路径,移植性更高,这里使用绝对路径)

    5.点开 链接器 下的 输入 选项 -> 附加依赖项 -> 填写你的.lib全名

    6.调用运行啦

    运行结果

    到这你是不是觉得结束了?那你就太天真了,就没有想过为什么我创建一个DLL工程,为啥会出现一个.lib嘛

    哈哈哈哈,好好解释下

     

    静态库:在vs中新建生成静态库的工程,编译生成成功后,只产生一个.lib文件


    动态库:动态链接库是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。在vs中新建生成动态库的工程,编译成功后,产生一个.lib文件和一个.dll文件

    静态库中的lib:该LIB包含函数代码本身(即包括函数的索引,也包括实现),在编译时直接将代码加入程序当中
    动态库中的lib:该LIB包含了函数所在的DLL文件和文件中函数位置的信息(索引),函数实现代码由运行时加载在进程空间中的DLL提供
    总之,lib是编译时用到的,dll是运行时用到的。如果要完成源代码的编译,只需要lib;如果要使动态链接的程序运行起来,只需要dll。
     

    参考https://blog.csdn.net/qq_17239003/article/details/78482145

    特此鸣谢

     

    展开全文
  • OUR_MIFARE.dll动态库使用说明

    千次阅读 2011-06-16 16:44:00
    OUR_MIFARE.dll动态库使用说明一、动态库简介动态库OUR_MIFARE.dll用VC6.0++开发,编译成Release实体,适用于WIN98、NT、2000、XP、2003环境。本文档下面的源代码例子是C++builder 的调用格式。本动态库是本公司USB...

    OUR_MIFARE.dll动态库使用说明

    一、动态库简介

    动态库OUR_MIFARE.dllVC6.0++开发,编译成Release实体,适用于WIN98NT2000XP2003环境。本文档下面的源代码例子是C++builder 的调用格式。

    本动态库是本公司USB接口IC卡读写器的配套文件,必须和读写器一起使用。还必须将硬件底层驱动的动态库ICUSB.DLL放在与OUR_MIFARE.dll同一个目录下,否则不能使用。

    OUR_MIFARE.dll在调用ICUSB.DLL时采用的是动态调用的方法,所以在软件运行中可以随时更换USB接口。

    推荐使用动态调用的方法使用本动态库。

    IC卡内部存储结构知识:

    本读写器支持ISO14443 TYPE A标准的Mifare One系列卡。Mifare One卡的内部存储结构分为16个扇区,从第0区到第15区,每个扇区有独立的密码和权限控制字,可作为独立的电子钱包,每个扇区有4个块,序号为第0块、第1块、第2块、第3块,每块16个字节,第3块是卡的密码和权限控制字专用块,禁止在此存放数据。第0块、第1块、第2块可随意存放数据。但第0区的第0块已被固化了IC卡出厂信息,此块只能读出信息,不可更改。

    每张卡都有一个全球统一的4个字节的序列号。许多公司销售的读卡器只有读取卡序列号的功能,也能用于一般的考勤系统。但这类读卡器跟本公司的读写器有着本质的不同,本公司的读写器不仅能读序列号,而且还有服务于IC卡所有用途的功能,比如选中卡、认证、读卡、写卡、改密码、休眠卡能功能。

    二、易用函数

    大部份软件、一卡通公司,只要使用以下二个函数完全可以达到软件需求,比如读出信息、读出金额、扣费等等。

    轻松读卡

    函数名:piccreadex

    功能

    超强读卡,使用些函数可以一次性读整个区的第0块、第1块、第2块共3块的信息,并且返回卡序列号。

    原始声明

    unsigned char __stdcall piccreadex(unsigned char ctrlword,unsigned char *serial,unsigned char area,unsigned char keyA1B0,unsigned char *picckey,unsigned char *piccdata0_2)

    输入

    1ctrlword读卡的控制字,ctrlword是一个字节,相当于八个位,每个位只有01两种状态:

    推荐使用方法如下:

    //先定义以下常量

    #define BLOCK0_EN   0x01

    #define BLOCK1_EN   0x02

    #define BLOCK2_EN   0x04

    #define NEEDSERIAL  0x08

    #define EXTERNKEY   0x10

    举例:

    //以下控制字含义:读块0、块1、块2,仅读指定序列号的卡,需要每次指定密码

    Ctrlword = BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + NEEDSERIAL+ EXTERNKEY

    //以下控制字含义:读块0、块2,可读任意卡,需要每次指定密码

    Ctrlword = BLOCK0_EN + BLOCK2_EN +  EXTERNKEY

    //以下控制字含义:读块0、块2,可读任意卡,启用芯片内部密码

    Ctrlword = BLOCK0_EN + BLOCK2_EN

     

    2serial只需指向一个至少已分配了4char空间的可写数组 unsigned char *指针, serial的下标由0开始。如果在控制字中没有指定NEEDSERIAL ,则Serial数组的内容无需赋值,因为此数组仅用于返回值。如果指定了NEEDSERIAL,则必须为数组的内容赋值。

    3area是需要读出的区号,则0-15中的某个数。

    4keyA1B00时以B密码来认证,为非0时以A密码来认证。刚出厂的卡以A密码来认证。

     

    5*picckey 指向存放卡密码的数组(6char的密码数组)

     

    6*piccdata0_2是指向下标个数大于48的字节数组,用于存放3个块的数据,其中下标0~15存放作为读出的块0的数据,下标16~31存放作为读出的块1的数据,下标32~47存放作为读出的块2的数据,

    返回

    返回unsigned char值,并将卡本块的数据传值到*piccdata指向的数组中。

    0

    操作成功,读出的数据有效。

    1

    0~2块都没读出来,可能刷卡太块。但卡序列号已被读出来。

    2

    0块已被读出,但1~2块读取失败。卡序列号已被读出来。

    3

    01块已被读出,但2块读取失败。卡序列号已被读出来。

    8

    寻卡错误,根本就没有卡在感应区,*serial无效。

    9

    有多张卡在感应区,寻卡过程中防冲突失败,*serial无效。

    10

    该卡可能已被休眠,无法选中,但卡序列号已被读出,*serial数组中的数据有效。

    11

    密码装载失败。

    12

    密码认证失败。

    21

    本函数需要引用的动态库ICUSB.DLL不在当前目录下。

    22

    动态库或驱动程序异常,解决方法是退出程序,拔出IC卡读写器,重装驱动程序再插上IC卡读写器重试,或者重新拷贝动态库OUR_MIFARE.dll到正确的位置。

    24

    操作超时。可能是电脑中毒导致USB帧传递调度缓慢,或者是IC卡读写器有问题,解决方法是重启电脑或重新拔插IC卡读写器。

    27

    USB传输不稳定导致传输的字符不全。不需理会这个错误,因为基本上是不会出现这个错误的。

    28

    USB传输不稳定导致CRC校验错。不需理会这个错误,因为基本上是不会出现这个错误的。

    其他

    未知错误

    例子及注释

    请要本公司网站下载各种开发工具的例子源代码,本函数的声明和输入参数格式可以直接套用,谢谢使用

     

    轻松写卡

    函数名:Piccwriteex

    功能

    超强写卡,使用些函数可以一次性写整个区的第0块、第1块、第2块信息。

    原始声明

    unsigned char __stdcall piccwriteex(unsigned char ctrlword,unsigned char *serial,unsigned char area, unsigned char keyA1B0,unsigned char *picckey,unsigned char *piccdata0_2)

    输入

    1ctrlword读卡的控制字,ctrlword是一个字节,相当于八个位,每个位只有01两种状态:

    推荐使用方法如下:

    //先定义以下常量

    #define BLOCK0_EN   0x01

    #define BLOCK1_EN   0x02

    #define BLOCK2_EN   0x04

    #define NEEDSERIAL  0x08

    #define EXTERNKEY   0x10

    #define NEEDHALT   0x20

    举例:

    //以下控制字含义:读块0、块1、块2,仅写指定序列号的卡,需要每次指定密码,写成功后休眠卡

    Ctrlword = BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + NEEDSERIAL+ EXTERNKEY + NEEDHALT

    //以下控制字含义:写块0、块2,可写任意卡,需要每次指定密码, 写成功后休眠卡

    Ctrlword = BLOCK0_EN + BLOCK2_EN +  EXTERNKEY + NEEDHALT

    //以下控制字含义:写块0、块2,可写任意卡,启用芯片内部密码,写成功后休眠卡

    Ctrlword = BLOCK0_EN + BLOCK2_EN + NEEDHALT

     

    2serial只需指向一个至少已分配了4char空间的可写数组 unsigned char *指针, serial的下标由0开始。如果在控制字中没有指定NEEDSERIAL ,则Serial数组的内容无需赋值,因为此数组仅用于返回值。如果指定了NEEDSERIAL,则必须为该数组的内容赋值。

     

    3area是需要准备写的区号,则0-15中的某个数。

     

    4keyA1B00时以B密码来认证,为非0时以A密码来认证。刚出厂的卡以A密码来认证。

     

    5*picckey 指向存放卡密码的数组(6char的密码数组)

     

    6*piccdata0_2是指向下标个数大于48的字节数组,用于存放3个块的数据,其中下标0~15存放作为准备写的块0的数据,下标16~31存放作为准备写的块1的数据,下标32~47存放作为准备写的块2的数据,

    返回

    返回unsigned char值,并将卡本块的数据传值到*piccdata指向的数组中。

    0

    操作成功,写卡数据有效。

    1

    0~2块都没写进去,可能刷卡太块。

    2

    0块已写进去,但1~2块写失败。

    3

    01块已被写进去,但2块读写失败。

    8

    寻卡错误,根本就没有卡在感应区,*serial无效。

    9

    有多张卡在感应区,寻卡过程中防冲突失败,*serial无效。

    10

    该卡可能已被休眠,无法选中,但卡序列号已被读出,*serial数组中的数据有效。

    11

    密码装载失败。

    12

    密码认证失败

    21

    本函数需要引用的动态库ICUSB.DLL不在当前目录下。

    22

    动态库或驱动程序异常,解决方法是退出程序,拔出IC卡读写器,重装驱动程序再插上IC卡读写器重试,或者重新拷贝动态库OUR_MIFARE.dll到正确的位置。

    24

    操作超时。可能是电脑中毒导致USB帧传递调度缓慢,或者是IC卡读写器有问题,解决方法是重启电脑或重新拔插IC卡读写器。

    27

    USB传输不稳定导致传输的字符不全。不需理会这个错误,因为基本上是不会出现这个错误的。

    28

    USB传输不稳定导致CRC校验错。不需理会这个错误,因为基本上是不会出现这个错误的。

    其他

    未知错误

    例子及注释

    请要本公司网站下载各种开发工具的例子源代码,本函数的声明和输入参数格式可以直接套用,谢谢使用

     

    以上函数是在已知卡密码的情况下操作。如果需要更改卡密码可通过piccchangesinglekey函数,快速地更改卡密码,piccchangesinglekey详细介绍请查看下面第12页。

    展开全文
  •  如果没有使用其它的依赖库或者其它开源代码,那么可以直接按照gcc编译器生成和使用静态/动态库的方式。可以参考博客: https://blog.csdn.net/arackethis/article/details/43340065 按照这篇博客里面的操作,...
  • 说明前言我们经常会在动态库使用一些资源文件,例如 qss 文件、 png 文件,以达到美化界面的效果,刚刚使用 Qt 创建动态库的朋友可能会发现, 在代码中无法添加 qrc 资源文件中的图片资源。 显然,这会给我们带来...
  • 一样让别人使用呢? 很简单,我们需要先新建两个文件。 其中mydll.cpp和mydll.h都是需要你在dll项目中新建的,如果你不知道怎么新建一个dll项目,请阅读本教程第一章。 建立完成后,我们首先写mydll.h,代码...
  • 动态库使用的几个注意点

    千次阅读 2016-11-13 13:35:18
    一、“--export-dynamic”参数的使用GCC编译可执行文件时可以使用-Wl,--export-dynamic参数,此时链接器产生可执行文件时会将所有全局符号导出到动态符号表。gcc -Wl,--export-dynamic -o p1 p1.c -L. -l0如果在创建...
  • 什么是动态加载? 之前我们都是用的是自动加载,他是在exe运行启动时,就加载dll。...如何使用动态加载? 首先我们对之前的dll文件做一个小改动,因为动态加载无需声明头文件(*.h),所以所以...
  • 另外静态库、动态库也是问的频率比较高的问题。在这里也做了总结。 ######大多数unix系统下面的调试器的使用方法如下:###### ***************gdb介绍********************* GNU 的调试
  • ,因此在程序运行时还需要动态库存在。   因为我的虚拟机没有安装vs,电脑找不到程序使用的这个库(这个库是vs自带的),所以就没办法运行。 我们只需设置为静态编译即可,让dll写进exe内,没有外部库也...
  • http://www.chinaunix.net 作者:蓝色键盘 发表于:2003-05-09 14:01:19 ... 另外静态库、动态库也是问的频率比较高的问题。在这里也做了总结。 ######大多数unix系统下面的调试器的使用方法如下:######
  • 链接静态库,禁止使用动态库 -shared 进行动态库编译,链接动态库 -Ldir 在动态库的搜索路径中增加dir目录 -lname 链接静态库(libname.a)或动态库(libname.so)的库文件 -fPIC(或fpic) 生成...
  • vs生成动态库使用动态库

    千次阅读 2017-05-25 21:51:30
    动态库(.dll):动态库又称动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可...
  • Linux下Qt动态库使用

    2015-06-16 09:29:27
    为什么在Linux下编写的动态库使用的时候提示“error while loading shared libraries:libDao.so.1:cannot open shared object file:No such file or derectory”
  • 本文的目的是测试各种类型库的编译后的使用效果,包括库又链接其他库的编译方法,使用方法,依赖性等。 太长不看版:请跳至文章最后的总结对比表。...④动态库libbb.so依赖动态库libaa.so的测试; ...
  • iOS静态库动态库基本使用

    千次阅读 2015-11-05 17:29:44
     在Xcode6之前我们只能在App中使用‘静态库’,如果使用到了‘动态库’那么App是无法上传AppStore的。但Xcode6开始Apple就开放了‘动态库’的使用。   静态库与动态库的区别:   静态库:在项目中
  • Linux使用静态库和动态库

    千次阅读 2016-05-08 16:28:07
    Linux使用静态库和动态库
  • 4 动态库的加载及调用 动态库的加载分为静态加载、动态加载两种方式。 4.1 静态加载动态库 静态加载动态库的步骤包括:设置项目附加库目录;设置项目附加依赖项;移动DLL文件以及声明动态库的导出函数。 创建...
  • Linux 动态库的编译和使用

    千次阅读 2019-09-28 21:07:03
    动态库又叫动态链接库,是程序运行的时候加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序。动态库是目标文件的集合,目标文件在动态库中的组织方式是按特殊的方式组织形成的。在动态库中...
  • C++静态库与动态库详解与使用

    千次阅读 2016-09-30 09:07:40
    这次分享的宗旨是——让大家学会创建与使用静态库、动态库,知道静态库与动态库的区别,知道使用的时候如何选择。这里不深入介绍静态库、动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书《程序员的自我修养...
  • linux下动态库使用

    千次阅读 2015-11-06 13:47:41
    编译时与运行时库的路径运行时动态库的路径搜索顺序 编译目标代码时指定的动态库搜索路径(指的是用-wl,rpath或-R选项而不是-L);gcc -Wl,-rpath,/home/arc/test,-rpath,/usr/local/lib test.c 环境变量LD_LIBRARY_...
  • 使用Golang写C的动态库 , 当前项目目录 root@working - srv: tree . / . / | - - hello | ` - - main . go ` - - main . c root@working-srv: more hello/main. go package main ...
  • Windows下使用静态库和动态库

    万次阅读 2016-05-10 23:26:39
    Windows下使用静态库和动态库
  • gcc创建和使用静态库、动态库

    千次阅读 2018-08-13 17:41:45
    下面以工程libtest为例说明gcc创建和使用静态库、动态库的过程,libtest目录结构和内容如图1所示,其中三个文件hello.h,hello.c和main.c的内容如下。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 828,681
精华内容 331,472
关键字:

动态库怎么使用