精华内容
下载资源
问答
  • 动态库编写 头文件.h注意事项
    千次阅读
    2019-05-30 18:56:51

    比如  log.h  log.c  

    其中log.h 就几个函数的定义,用到的头文件很少。

    但是log.c文件里面会有很多函数的实现,用到比如  

    #include <string.h>
    #include <time.h>
    #include <limits.h>
    #include <signal.h>

    #include <unistd.h>
    #include <dirent.h>
    #include <stdlib.h>
    #include <stddef.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <errno.h>

    这些头文件最好不要放到头文件里面,而是放进log.c文件里面。

    更多相关内容
  • SQLite3一整套,包括了头文件,拿来就能用,无需安装,直接添加到工程里
  • 动态链接头文件

    2019-06-19 13:08:58
    动态链接头文件
  • 编译好的quazip头文件,直接将两个文件夹添加到工程路径中,然后配置工程的包含其头文件目录,在所需的.h或.cpp中引用就行
  • 利用CMake编译好的GLM库,包括静态库、动态库头文件。可以直接在VS中使用,我测试的环境是win10+VS2015(win32/debug)。
  • x264源代码+编译脚本+动态库+静态库+头文件,打包下载,包括armv7a和x86两种架构 想自己编译的可以参考博客:https://hellogoogle.blog.csdn.net/article/details/119561028
  • 1.适配openssl-1.0.2p qt5.12.2+vs2015的 https网页爬取测试; 2.编译麻烦;
  • 动态加载so

    在开发过程中,只有so库但是没有函数引用的头文件,但是又想调用里面的方法,因此,可以动态加载so,进行调so中的方法。具体步骤如下:

    1.创建add.c文件

    vim add.c

    int add(int a,int b)
    { 
      return a+b;
    }
    

    2.生产动态库

    在add.c的目录下,执行命令,后会生成 libadd.so
    -fPIC 生成 PIC 代码,.so 要求为 PIC,以达到动态链接的目的,否则,无法实现动态链接
    -shared 动态库
    -o 生成目标的文件名

    gcc -shared -fPIC add.c -o libadd.so
    

    3.编写调用so函数

    #include <stdio.h>
    #include <stdlib.h>
    #include <dlfcn.h>
    
    typedef int (*Add)(int,int);
    
    int main()
    {       
    	//RTLD_NOW:在dlopen返回前,解析出全部没有定义的符号,解析不出来返回NULL。
        //RT_GLOBAL:动态库定义的符号可被其后打开的其他库解析。
       //RT_LOCAL:和上面相反,不能被其他库解析。默认。
       //RTLD_LAZY:暂缓决定,等有需要时再解出符号
        void *handle=dlopen("./libadd.so",RTLD_LAZY);
        Add add=NULL;
        *(void **)(&add)=dlsym(handle,"add");
        int result=add(1,2);
        printf("1 + 2 = %d \n",result);
        return 0;
    }  
    

    4.编译生成可执行文件

    在main.c的目录下,执行命令,后会生成 main 可执行文件
    -rdynamic 生成可执行文件
    -o 目标文件名

    gcc -rdynamic -o main main.c -ldl
    

    5.测试

    ./main 
    

    输出结果:
    1+ 2 =3

    展开全文
  • libfaac源代码+编译脚本+静态库+动态库+头文件 完整用法请参照博客:https://hellogoogle.blog.csdn.net/article/details/119531649
  • win10编译crtmpserver的依赖OpenSSL的头文件和静态文件
  • 此资源为FFmpeg4.0编译好的Android版动态库。可以在ndk项目中引入使用开发音视频或者练习ffmpeg开发技术
  • 该opencv动态库支持所有有关于opencv相关的技术,可以直接放在vs中,进行相关vs的环境配置之后,直接使用!
  • FFmpeg的so动态库头文件,源码,直接下载可以使用,不用自己编译
  • C的常用模板函数接口 --字符串操作、排序等字符串和排序算法用到的动态库linxiyuan.so和头文件xy_string_code.h、xy_sort_code.h。
  • 关于静态库与动态库的作用与用法

    前言

    先导问题

    • 如果一个函数在多个文件中同时使用,怎么办?
    • 在程序设计中如何避免重复造轮子?

    解决方案

    • 头文件+源文件,将不同文件的函数引用到当前文件;
    • 库文件,通过规范的代码编写成特定的库,以便后续调用;
    • 宏定义,通过文本替换来定义简单的函数或变量。

    编译过程

    源文件(输入)
    预处理
    编译
    汇编
    链接
    目标文件(输出)

    宏定义

    在预处理阶段,是编译器对文本的替换。

    对比头文件+源文件与库文件

    头文件+源文件

    • 编译前是人类可读的,即源代码;
    • 在编译过程中的使用位置:在编译中使用;
    • 来源:人手动编写的;
    • 文件类型:C++中是.cpp.hpp文件。

    库文件

    库是一种可执行代码的二进制形式,已经写好、适用成熟、在遵守相关协议下可以复用被操作系统载入内存中执行的代码。

    • 编译后是机器可读的,即二进制文件;
    • 在编译过程中的使用位置:在链接中使用;
    • 来源:人手动编写后经过编译生成的;
    • 文件类型:C++中是.so.ko.a文件。

    共同点

    • 虽然没有规定调用库函数必须引用头文件,但一般约定,当调用库函数的时候需要引用接口函数所在的头文件;
    • 一个库文件均有一组头文件与其对应。

    链接

    在这里插入图片描述
    链接过程是将链接控制文件、命令行参数、对象文件与库文件融合的过程。

    库文件

    库文件分为两种:动态库(共享库)和静态库

    动态库

    • 链接的时候不放入库文件,而是运行的过程中通过映射调用;
    • 运行速度慢;
    • 生成的目标文件需要在对应的动态库存在的时候才能运行;
    • 目标文件小;

    静态库

    • 链接的时候将.o文件直接放入函数应该在的位置;
    • 运行速度快;
    • 生成一个目标文件;
    • 目标文件大;

    Linux下几种库文件

    • .so文件:shared object
      .so文件是用户层的动态链接库,用于用户层的动态链接使用,内核态的代码同样不能直接访问。
    • .ko文件:kernel object
      .ko文件是内核态的动态链接库,用于内核态的动态链接使用,可以用于内核之间的模块相互调用。用户态的代码不可直接调用内核态的代码,但是可以通过其他方式进行通信。
    • .a文件:archive
      .a文件是用于静态链接时,使用的静态库。
    • .o文件:object
      .o文件是编译生成的目标文件,.a文件就是由.o文件打包生成的。

    Linux环境中实例

    文件名:test.c

    #include <stdio.h>
    
    int testfunc(void)
    {
    	puts("I'm so file.");
    	return 123;
    }
    

    文件名:test.h

    #ifndef SO_TEST
    #define SO_TEST
    int testfunc(void);
    #endif
    

    文件名:mytest.c

    #include <stdio.h>
    #include "test.h"
    
    int main()
    {
    	printf("%d\n", testfunc());
    	return 0;
    }
    

    在Linux终端中输入

    gcc test.c -fPIC -shared -o libtest.so
    sudo link libtest.so /usr/lib/libtest.so
    gcc mytest.c -L . -l test -o mytest
    

    在这里插入图片描述

    说明

    • 默认程序运行的时候会在/usr/lib下寻找库;
    • 一种是通过软链接将库链接到/usr/lib下;
    • 另一种是修改PATH和 LD_LIBRARY_PATH,PATH是命令的环境变量,LD_LIBRARY_PATH是库的环境变量。详见Makefile与bash一文。
    • gcc test.c -fPIC -shared -o libtest.so
      -fPIC:位置无关代码(Position Independent Code, PIC)
      -shared:告诉编译器这是要编译动态链接库
      编译最终的命名规则是以lib开头的,即libxxx.so
    • gcc mytest.c -L . -l test -o mytest
      -L:寻找库的目录,.是当前目录
      -l:(小L)要链接的库
    • 注意与-I的区分,因为很多时候很难分得清大i还是小L(当然还有数字1)
    展开全文
  • 在Windows下使用的32位ffmpeg4.2.2的,包括编译运行头文件。 使用方法参考: https://blog.csdn.net/xiaolong1126626497/article/details/105446935
  • 编译好的QFtp库,包括头文件.h和静态库文件lib已经dll动态库文件,绝对可以使用,还包含有QFtp库的使用文档,自己总结的
  • JRTPLIB动态库包含头文件,Window下32位编译,直接可以用,QT支持
  • 一、在 Visual Studio 2019 中创建 " 控制台应用 " 程序、 二、拷贝 xxx.lib、xxx.dll、xxx.h 到源码路径、 三、导入 xxx.h 头文件、 四、配置动态库引用、 五、调用动态库中的函数、





    一、在 Visual Studio 2019 中创建 " 控制台应用 " 程序



    欢迎界面中 , 选择 " 创建新项目 " ,

    在这里插入图片描述

    选择创建 " 控制台应用 " 项目类型 ,

    在这里插入图片描述

    配置 项目名称 与 位置 ,

    在这里插入图片描述

    项目创建完成后 , 初始程序是 C++ 程序 , 这里修改为 C 语言程序 ;

    在这里插入图片描述





    二、拷贝 xxx.lib、xxx.dll、xxx.h 到源码路径



    将 动态库的 描述文件 xxx.lib , 动态库文件 xxx.dll , 动态库头文件 xxx.h , 拷贝到 项目的源码路径中 , 注意就是主函数源码所在的目录 ;

    在这里插入图片描述





    三、导入 xxx.h 头文件



    在 " 解决方案资源管理器 " 中 , 右键点击 " 源文件 " , 选择 " 添加 -> 现有项 " 选项 ,

    在这里插入图片描述

    在弹出的对话框中 , 选择拷贝过来的 xxx.h 头文件 ;

    在这里插入图片描述

    此处 xxx.h 头文件 出现在 源文件 中 ;

    在这里插入图片描述

    将 xxx.h 头文件手动拖动到 " 头文件 " 中 ;

    在这里插入图片描述





    四、配置动态库引用



    右键点击 " 解决方案 " , 在弹出的菜单中 , 选择 " 属性 " ,

    在这里插入图片描述

    选择 " 配置属性 -> 链接器 -> 输入 -> 附加依赖项 " 的 " 编辑 " 选项 ,

    在这里插入图片描述

    将 xxx.lib 选项 , 拷贝到此处 ;

    在这里插入图片描述





    五、调用动态库中的函数



    导入头文件 , 即可调用动态库中的函数 ;

    展开全文
  • .pro文件内加上了需要的LIBS和HEADERS,在usr/lib下也添加了需要的lib文件,但现在运行起来会报“unknown type name 'XXX'”,"use of undeclared identifier 'XXX'"这些好像是在说没找到头文件的报错。。。 请问...
  • qrencode模块所需动态库静态库与头文件
  • libcurl
  • 在使用的时候要记得添加头文件,文本函数里放这两个#include "ft2build.h" #include FT_FREETYPE_H 头文件就行了,好好使用吧。
  • SQlite3头文件分享

    2016-02-26 15:58:32
    文件列表:1)sqlite3.h;...但是按照一些描述步骤总是生成失败,下面的资源是已经生成好的SQlite头文件,可以拿过来直接用,我的几个项目都是使用该头文件来完成的,具体的使用方法可以参考本人写的微博内容。
  • C++ zeromq开发必备的动态库头文件:zmq.h、zmq.hpp、zmq_addon.hpp、zmq_utils.h、libzmq.lib、libzmq.dll
  • 三、为什么只用在程序头部写上包含的头文件头文件中并没有实现内容就可以使用声明的函数呢?动静态区别1.可执行文件大小不一样2.占用磁盘大小不一样3.拓展性与兼容性不一样4.依赖不一样5.复杂性不一样6.加载速度...
  • gdal-1.11.2版本的,采用vs2013编译的32+64位动态库+静态库+头文件
  • 好用的c++多线程软件 Pthread visual studio可用,mfc可用
  • MC_dll.h关于matlab与C语言之间的动态链接库头文件
  • 动态库:[Windows 下 .dll,Linux 下 .so] 之外, 必须提供头文件头文件是你这个库里面提供了那些接口可以供外界使用。 如果没有头文件,其他人无法使用,因为不知道函数方法的原型! 2、在为某些软件项目写插件,而...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 137,386
精华内容 54,954
关键字:

动态库没有头文件