精华内容
下载资源
问答
  • AD库文件(元件库+封装库+3D模型),包含大量常用元器件、芯片封装,包括常用电容电阻的插件和贴片封装,二极管、三极管封装,以及TI、Altera、NXP、Atmel等各大厂商的芯片封装,包括电源芯片、FPGA、STM32芯片等...
  • zlib库文件

    千次下载 热门讨论 2015-07-10 13:08:02
    用于C++代码中,解压与压缩相关的文件操作。
  • OpenGL库文件

    千次下载 热门讨论 2014-04-28 23:42:22
    Codeblocks下面配置OpenGL所需的正确的库文件libglut32.a,网上提供的编译好的都是dll的库,编译器无法链接,这里面的是好使的。配置文章参见:http://blog.csdn.net/yang_7_46/article/details/24674849
  • OpenGL库文件完整版

    热门讨论 2016-03-09 17:34:13
    完整的opengl库文件
  • quazip已编译(含源码及库文件

    热门讨论 2016-02-04 18:34:21
    QuaZIP是使用Qt,C++对ZLIB进行简单封装的用于压缩ZIP以及解压缩ZIP的开源。 里面包含源码及编译后的,可以直接拿来使用
  • OpenCV库文件介绍

    万次阅读 多人点赞 2017-09-07 17:18:58
    以前都是直接用opencv,都没有仔细研究过,这次把库文件都介绍一下。1、build和source当我们安装完opencv中,你会发现在opencv文件夹中有两个文件夹,build和source,那它们分别是干什么的呢。首先说这两者的关系,...

    以前都是直接用opencv,都没有仔细研究过,这次把库文件都介绍一下。

    1、build和source

    当我们安装完opencv中,你会发现在opencv文件夹中有两个文件夹,build和source,那它们分别是干什么的呢。

    这里写图片描述

    首先说这两者的关系,sources放的是opencv中的cpp文件,相当于一个工厂,build放的是opencv中的h、hpp、lib文件,相当于一个工具,opencv的开发者(当然开源后的使用者也可以)通过sources中的源文件,构建出build中的库文件,然后使用者就可以链接这些库,include<头文件>。一般非开源的程序和库是不开放sources的,而opencv作为一个开源库,这些也是使用者可见的。

    source里面是各种各样的函数实现,对于只想用opencv的人来说,只关心我怎么用,于是开发者就会使用这些源文件构建出库,这些库里面包含了函数实现。这些库就是各种lib,然后还有头文件。

    build里面只有接口,没有cpp中的实现什么的,build是对使用者的,使用者只用知道接口就行了,不需要知道这个是怎么做到的。当然因为opencv开源,所以使用者也可以直接查看源文件。

    具体来说,soucees里面放的是函数具体的实现,比如有gray方法,对一个mat的像素怎么使它变成灰度化。

    使用者include<头文件>,头文件里面是各种接口,比如gray,就是一个gray(MAt img),使用者链接这些库,inluce<头文件>,然后在程序中调用gray,然后程序运行的时候会进行链接时,在各种依赖库中寻找gray的实现,因为我们连接了opencv的库,所以在opencv的lib中就找到了gray的实现,然后就调用这个实现,然后就灰度化了,就是这个么过程。

    举个不是很恰当的例子,build就像是卖给用户的macbook,用户只用知道怎么用,这个操作系统很好用,不卡,不用知道这个操作系统怎么实现了。怎么实现的就在source里面,非开源的程序和库是不可能让你看到source的。

    2、build

    在build文件夹中,如下,

    这里写图片描述
    .

    首先,doc文件夹下放的是各种关于opencv的文档;include文件夹下是所有的头文件;其余四个分别是:一个给java用的库、一个给python用、一个给x86win用、一个给x64win用。两个cmake文件都是cmake的一些配置,很强大的编译工具。

    2.1 include

    分为opencv和opencv2.

    这里写图片描述

    这里写图片描述
    .

    这里借用博客1博客2的介绍。

    1、opencv

    其中cv.h中包含的头文件:

    #include "opencv2/core/core_c.h"
    #include "opencv2/core/core.hpp"
    #include "opencv2/imgproc/imgproc_c.h"
    #include "opencv2/imgproc/imgproc.hpp"
    #include "opencv2/video/tracking.hpp"
    #include "opencv2/features2d/features2d.hpp"
    #include "opencv2/flann/flann.hpp"
    #include "opencv2/calib3d/calib3d.hpp"
    #include "opencv2/objdetect/objdetect.hpp"
    #include "opencv2/legacy/compat.hpp"

    cv.hpp中包含头文件:

    #include <cv.h>

    也就是说cv.hpp是包含cv.h的,程序中凡用到cv.h的地方都可以用cv.hpp 替换,那么为什么又要设置hpp文件呢?

    hpp是Header Plus Plus的简写,与 .h 文件类似。但与之不同的是,.hpp将*.cpp中的实现代码也写入其中,使得定义与实现都包含在同一文件中。这样做带来的好处显而易见,无需再将cpp文件添加到项目中编译,减少了编译次数,也不用发布烦人的lib,dll 文件,因此非常适合用来编写公用的开源库。

    文件夹opencv中的头文件都是类似的,均包含文件夹opencv2里的头文件。所以我们如果是从低版本的opencv学习过渡到高版本的opencv的话,如果不适应可以先以opencv文件夹里的文件调用为标准。如果熟悉opencv里的函数分布,也可以直接调用opencv2文件夹里的具体头文件,这样在头文件预编译提高效率。

    2、opencv2

    先看opencv.hpp文件:

    #include "opencv2/core/core_c.h"
    #include "opencv2/core/core.hpp"
    #include "opencv2/flann/miniflann.hpp"
    #include "opencv2/imgproc/imgproc_c.h"
    #include "opencv2/imgproc/imgproc.hpp"
    #include "opencv2/photo/photo.hpp"
    #include "opencv2/video/video.hpp"
    #include "opencv2/features2d/features2d.hpp"
    #include "opencv2/objdetect/objdetect.hpp"
    #include "opencv2/calib3d/calib3d.hpp"
    #include "opencv2/ml/ml.hpp"
    #include "opencv2/highgui/highgui_c.h"
    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/contrib/contrib.hpp"

    很明显opencv.hpp的头文件包含了opencv库里的所有头文件。

    接着看opencv_modules.hpp文件:

    #define HAVE_OPENCV_CALIB3D
    #define HAVE_OPENCV_CONTRIB
    #define HAVE_OPENCV_CORE
    #define HAVE_OPENCV_FEATURES2D
    #define HAVE_OPENCV_FLANN
    #define HAVE_OPENCV_GPU
    #define HAVE_OPENCV_HIGHGUI
    #define HAVE_OPENCV_IMGPROC
    #define HAVE_OPENCV_LEGACY
    #define HAVE_OPENCV_ML
    #define HAVE_OPENCV_NONFREE
    #define HAVE_OPENCV_OBJDETECT
    #define HAVE_OPENCV_OCL
    #define HAVE_OPENCV_PHOTO
    #define HAVE_OPENCV_STITCHING
    #define HAVE_OPENCV_SUPERRES
    #define HAVE_OPENCV_TS
    #define HAVE_OPENCV_VIDEO
    #define HAVE_OPENCV_VIDEOSTAB

    其解释如下:

    【calib3d】:其实就是就是Calibration(校准)加3D这两个词的组合缩写。这个模块主要是相机校准和三维重建相关的内容。基本的多视角几何算法,单个立体摄像头标定,物体姿态估计,立体相似性算法,3D信息的重建等等。

    【contrib】:也就是Contributed/Experimental Stuf的缩写, 该模块包含了一些最近添加的不太稳定的可选功能,不用去多管。2.4.8之后有新型人脸识别, 立体匹配 ,人工视网膜模型等技术。

    【core】: 核心功能模块,尤其是底层数据结构和算法函数。包含如下内容:

    • OpenCV基本数据结构
    • 动态数据结构
    • 绘图函数
    • 数组操作相关函数
    • 辅助功能与系统函数和宏

    【imgproc】: Image和Processing这两个单词的缩写组合。图像处理模块,这个模块包含了如下内容:

    • 线性和非线性的图像滤波
    • 图像的几何变换
    • 其它(Miscellaneous)图像转换
    • 直方图相关
    • 结构分析和形状描述
    • 运动分析和对象跟踪
    • 特征检测

    【features2】: d也就是Features2D, 2D功能框架 ,包含兴趣点检测子、描述子以及兴趣点匹配框架。包含如下内容:

    • 特征检测和描述
    • 特征检测器(Feature Detectors)通用接口
    • 描述符提取器(Descriptor Extractors)通用接口
    • 描述符匹配器(Descriptor Matchers)通用接口
    • 通用描述符(Generic Descriptor)匹配器通用接口

    【flann】: Fast Library for Approximate Nearest Neighbors,高维的近似近邻快速搜索算法库, 包含两个部分:快速近似最近邻搜索和聚类。

    【gpu】: 运用GPU加速的计算机视觉模块。

    【highgui】: 也就是high gui,高层GUI图形用户界面,包含媒体的I / O输入输出, 视频捕捉、图像和视频的编码解码、图形交互界面的接口等内容。

    【legacy】: 一些已经废弃的代码库,保留下来作为向下兼容,包含如下相关的内容。

    • 运动分析
    • 期望最大化
    • 直方图
    • 平面细分(C API)
    • 特征检测和描述(Feature Detection and Description)
    • 描述符提取器(Descriptor Extractors)的通用接口
    • 通用描述符(Generic Descriptor Matchers)的常用接口

    【ml】: Machine Learning,机器学习模块, 基本上是统计模型和分类算法,包含如下内容。

    • 统计模型 (Statistical Models)
    • 一般贝叶斯分类器 (Normal Bayes Classifier)
    • K-近邻 (K-NearestNeighbors)
    • 支持向量机 (Support Vector Machines)
    • 决策树 (Decision Trees)
    • 提升(Boosting)
    • 梯度提高树(Gradient Boosted Trees)
    • 随机树 (Random Trees)
    • 超随机树 (Extremely randomized trees)
    • 期望最大化 (Expectation Maximization)
    • 神经网络 (Neural Networks)
    • MLData

    【nonfree】: 也就是一些具有专利的算法模块 ,包含特征检测和GPU相关的内容。最好不要商用,可能会被告哦。

    【objdetect】: 目标检测模块,包含Cascade Classification(级联分类)和Latent SVM这两个部分。

    【ocl】: 即OpenCL-accelerated Computer Vision,运用OpenCL加速的计算机视觉组件模块。

    【photo】: 也就是Computational Photography,包含图像修复和图像去噪两部分。

    【stitching】: images stitching,图像拼接模块,包含如下部分。

    • 拼接流水线
    • 特点寻找和匹配图像
    • 估计旋转
    • 自动校准
    • 图片歪斜
    • 接缝估测
    • 曝光补偿
    • 图片混合

    【superres】: SuperResolution,超分辨率技术的相关功能模块。

    【ts】: opencv测试相关代码,不用去管他。

    【video】: 视频分析组件,该模块包括运动估计,背景分离,对象跟踪等视频处理相关内容。

    【Videostab】: Video stabilization,视频稳定相关的组件。

    2.2 X64和X86

    首先,这里面放的都是一些库文件,只不过X64面向64位,X86是32位的,然后以X64为例,

    .
    这里写图片描述
    .

    这是代表编译给不同版本的visual studio用的库,这里以vc12为例。

    .
    这里写图片描述
    .

    bin文件夹下:dll文件,动态链接库。具体实现的内容。计算机环境变量中,这个路径是要加到path中的。

    lib文件夹下:配置opencv环境时,添加的lib库。用来链接。

    staticlib文件夹下:静态库。

    静态库是编译时就把整个函数加载进去,所以可执行文件会变大。动态库是编译时加进去的是一个函数表,运行时才会从dll里面加载对应的函数实现。

    这里参考于博客给出一个关于dll和lib的解释。

    共有两种库:

    • 一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。
    • 一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library。

    共有两种链接方式:

    • 动态链接使用动态链接库,允许可执行模块(.dll文件或.exe文件)仅包含在运行时定位DLL函数的可执行代码所需的信息。
    • 静态链接使用静态链接库,链接器从静态链接库LIB获取所有被引用函数,并将库同代码一起放到可执行文件中。

    关于lib和dll的区别如下:

    • lib是编译时用到的,dll是运行时用到的。如果要完成源代码的编译,只需要lib;如果要使动态链接的程序运行起来,只需要dll。

    • 如果有dll文件,那么lib一般是一些索引信息,记录了dll中函数的入口和位置,dll中是函数的具体内容;如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。使用静态编译的lib文件,在运行程序时不需要再挂动态库,缺点是导致应用程序比较大,而且失去了动态库的灵活性,发布新版本时要发布新的应用程序才行。

    • 动态链接的情况下,有两个文件:一个是LIB文件,一个是DLL文件。LIB包含被DLL导出的函数名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到DLL文件。在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中相应函数代码的地址,从而节省了内存资源。DLL和LIB文件必须随应用程序一起发行,否则应用程序会产生错误。如果不想用lib文件或者没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress装载。

    3、sources

    这里写图片描述

    • samples:是一些简短的学习用例。
    • modules:包含了所有的源文件。
    • doc:是一些文档,包含一些教程。
    • include:是所有的头文件。包含opencv和opencv2。
    • 3rdparty:第三方库,如ffmpeg视频编码等。
    • apps:一些应用,比如级联分类器,haar特征分类器。
    • cmake:编译相关。
    • data:级联分类器的一些数据。比如人脸检测、人眼检测等。
    • platform:平台相关,iOS、Android、Linux、script、win。

    展开全文
  • CMake教程(一)- 添加库文件什么是库文件如何在CMake中添加库文件 什么是库文件 如何在CMake中添加库文件

    什么是库文件

    一般来说,一个程序,通常都会包含目标文件和若干个库文件。经过汇编得到的目标文件再经过和库文件的链接,就能构成可执行文件。库文件像是一个代码仓库或代码组件的集合,为目标文件提供可直接使用的变量、函数、类等。

    库文件包含了静态链接库动态链接库两种。两者最根本的区别在与在程序编译的过程中,如何处理库文件和目标文件的链接关系。
    在这里插入图片描述

    静态链接库

    静态链接库在Linux系统中以.a文件的形式存在。

    在上图程序编译的链接阶段静态库会完全复制到可执行文件中,一旦可执行文件构建完成,就不再需要静态库的存在,可执行文件在后续的使用中,也不再依赖这个静态库。

    动态链接库

    虽然静态库非常容易理解且不会引入依赖问题,但是试想一下,如果你在统筹构建一个无比庞大的工程,这时,其中一个开发者升级了他所开发的库。这时,你就需要花费很长的时间来重新构建这个如此庞大的工程。这时,你就可以使用动态库来避免这个问题。

    动态库在程序编译的链接阶段,仅将一些重要的信息,如重定位和符号表信息复制到可执行文件中,可执行文件在后面执行的过程中,如果需要引用这个库文件,就会根据这些信息从系统中寻找对应的库文件以实现对应的功能。

    静态库和动态库的区别

    区别静态库动态库
    可执行文件大小较大
    (因为动态库的内容会被完全复制到可执行文件中)
    较小
    占用磁盘大小较大
    (如果有多个可执行文件都用到同一个静态库,这个静态库会被多次复制到不同的可执行文件中)
    较小
    (即使多个可执行文件都需要用到同一个动态库,他们也只是共用同一个动态库文件)
    拓展性与兼容性全量更新
    (库文件的更新会引起整个可执行文件的重新编译及发布)
    增量更新
    (不需要重新编译可执行文件,只需发布动态库文件)
    依赖问题无依赖问题
    (已构建的可执行文件不依赖其他静态库文件)
    有依赖问题
    (可执行文件的执行需要系统存在依赖的动态库文件)
    复杂程度简单复杂
    (会引起很多问题,例如如何在运行时确定地址,库文件版本管理等)
    加载速度

    如何在CMake中添加库文件

    下面是一个C++工程,包含了一个主程序文件和两个准备用于生成库文件的源文件。
    在这里插入图片描述
    这里有一个简单的主程序,其中调用了两个来自库文件的函数:print_char()print_int(),其中print_char()来自静态库文件,print_int()来自动态库文件。

    #include <iostream>
    #include "printer_char.hpp"
    #include "printer_int.hpp"
    
    using namespace std;
    
    int main(int argc, char* argv)
    {
        // 静态库 + 动态库
        print_char('A');        // print_char() 来自静态库
        print_int(5);           // print_int() 来自动态库
        return 0;
    }
    

    使用CMake来构建MakeFile,并将指定的源文件制作为静态库和动态库。

    cmake_minimum_required(VERSION 3.10)
    
    # 设置项目名
    project(CMakeTutorial VERSION 1.2)
    
    # 添加头文件搜索路径
    include_directories(
    ${PROJECT_SOURCE_DIR}/inc
    )
    
    # 生成库
    add_library(PrinterChar STATIC src/printer_char.cpp)    # 静态库
    add_library(PrinterInt SHARED src/printer_int.cpp)      # 动态库
    
    # 添加需要构建的可执行文件
    #------方法对比 1.1 - 不用库的写法
    # add_executable(LinkLibraryDemo link_library_demo.cpp src/printer_char.cpp src/printer_int.cpp)
    #------方法对比 1.2 - 用库的写法
    add_executable(LinkLibraryDemo demo/link_library_demo.cpp)
    target_link_libraries(LinkLibraryDemo PRIVATE PrinterChar)   # 为目标添加静态库
    target_link_libraries(LinkLibraryDemo PRIVATE PrinterInt)    # 为目标添加动态库
    

    然后执行下面的命令来生成库文件和可执行文件

    本人习惯在工程的根目录下创建一个cmake目录用于构建工程,以避免污染根目录。是在cmake目录下执行的cmake指令,所以指定的CMakeLists.txt文件是在当前目录的上一级目录。请根据你的工程目录结构选择正确的cmake指令的目录。

    cmake ..
    make
    

    在这里插入图片描述
    可见编译生成了两个库文件,静态库libPrinterChar.a和动态库libPrinterInt.so。此时可执行文件能够成功运行。

    尝试一下删除静态库libPrinterChar.a,并再次运行程序,发现程序依然能成功运行。这说明可执行文件的运行并不依赖静态库文件存在。
    在这里插入图片描述
    再尝试把动态库文件删掉,再运行可执行文件,运行失败,提示找不到对应的.so动态库文件。说明可执行文件的运行依赖对应的动态库文件的存在。
    在这里插入图片描述

    CMake 中 target_link_libraries 的 PRIVATE,PUBLIC 和 INTERFACE 的区别

    情况使用参数
    只有源文件(.cpp)中包含了库文件PRIVATE
    只有头文件(.hpp)中包含了库文件INTERFACE
    源文件和头文件都包含了库文件PUBLIC

    关于这个问题可以参考这里

    展开全文
  • 目录C/C++库文件全了解一. 前言二. 名词解释2.1. windows的静态库:xxx.lib2.2. windows的动态库:xxx.dll2.3. linux的动态库:libxxx.so2.4. linux的静态库:xxx.a三. 自己编译库3.1 编译产生windows的静态库3.1.1...

    C/C++库文件全了解

    • 一. 前言

      是不是老是在编译的过程出现各种奇奇怪怪的错误,对于出现的错误完全看不懂 在说点啥,只会复制黏贴到百度一通瞎搜索?是不是对于一些库文件.dll,.so,.lib完全不知道是个啥,完全不知道怎么使用他们?这是因为我们对一个C/C++程序的编译过程不够了解。关于编译过程的概念我放到了我的思维导图,链接,这里不再赘述。本文旨在带你了解库文件的编译生成和调用。

    • 二. 名词解释

      • 2.1. windows的静态库:xxx.lib

        包含testlib.lib和testlib.h两个文件,在写程序调用静态库里包含的函数的时候,编译完就已经把函数的实现放到了产生的exe文件里了,所以exe后期的运行不需要依赖静态库了,代价就是exe体积会变大。目前主流程序一般不用静态库
      • 2.2. windows的动态库:xxx.dll

        包含testlib.lib和testlib.dll两个文件,在写程序调用动态库里包含的函数的时候,编译阶段只把函数的重定位信息放到了exe文件里了,所以exe后期的运行需要依赖动态库。值得一提的是,虽然动态库和静态库都有一个.lib文件,但是两者完全不一样。动态库的.lib文件只在你调用的编译阶段需要,而.dll只在调用的运行阶段需要。
      • 2.3. linux的动态库:libxxx.so

        概念和windows的动态库一样,就是linux下的静态库和动态库命名时都需要在前面加lib
      • 2.4. linux的静态库:libxxx.a

    • 三. 自己编译库

      • 3.1 编译产生windows的静态库

        • 3.1.1代码准备:
          C:\Users\john\Desktop\static_lib:
          ├─static_lib.cpp
          ├─static_lib.h
          ├─pch.cpp #这两个是vc++自己产生的的预编译头,这里我们不关注
          └─pch.h #这两个是vc++自己产生的的预编译头,这里我们不关注

        • 3.1.2 static_lib.cpp:

          #include "pch.h"
          #include "static_lib.h"
          int add(int x, int y)
          {
          	return x + y;
          }
          
        • 3.1.3 static_lib.h:

          #pragma once
          int add(int x, int y);
          

          编译完成后得到DEBUG文件夹里得到static_lib.lib文件,另外加一个刚才用的static_lib.h,有这两个文件就可以调用函数add了,调用过程在后面。

      • 3.2 编译产生windows的动态库

        • 3.2.1代码准备:
          C:\Users\john\Desktop\dynamic_lib:
          ├─dynamic_lib.cpp
          ├─dynamic_lib.h
          ├─pch.cpp #这两个是vc++自己产生的的预编译头,这里我们不关注
          └─pch.h #这两个是vc++自己产生的的预编译头,这里我们不关注

        • 3.2.2 dynamic_lib.cpp:

          #include "pch.h"
          #include "dynamic_lib.h"
          #define  DLL_API _declspec(dllexport)
          DLL_API int add(int a, int b)   //实现两个整数相加
          {
          	return a + b;
          }
          
        • 3.2.3 dynamic_lib.h:

          #pragma once
          #define  DLL_API _declspec(dllexport)
          int add(int x, int y);
          

        编译完在DEBUG里会产生dynamic_lib.dll和dynamic_lib.lib两个文件

      • 3.3 编译产生linux的静态库

        • 3.3.1代码准备:
          /home/nvidia/DeepLearning/test_a:
          ├─static_lib.c
          └─static_lib.h
        • 3.3.2 static_lib.c:
          #include "static_lib.h"
          int add(int a, int b)
          {
          	int c;
          	c = a + b;
          	return c ;
          }
          
        • 3.3.3 static_lib.h:
          #pragma onece
          int add(int a, int b);
          
        • 3.3.4 编译生成静态库:
          编译过程分两步,先生成.o文件,然后根据.o文件归档为.a静态库文件
          gcc -c static_lib.c
          
          然后归档为静态库文件,这样就生成了静态库libstatic_lib.a
          ar crv libstatic_lib.a static_lib.o
          
      • 3.4 编译产生linux的动态库

        • 3.4.1代码准备:
          /home/nvidia/DeepLearning/test_so:
          ├─dynamic_lib.c
          └─dynamic_lib.h

        • 3.4.2 dynamic_lib.c:

          #include "dynamic_lib.h"
          int add(int a, int b)
          {
          	int c;
          	c = a + b;
          	return c ;
          }
          
        • 3.4.3 dynamic_lib.h:

          #pragma onece
          int add(int a, int b);
          

        编译产生.so文件,命令行里输入

        nvidia@tegra-ubuntu:~$ gcc dynamic_lib.c -shared -fPIC -o libdynamic_lib.so
        

        要注意的是,一般产生的.so文件名要以lib开头

    • 四. 自己调用库

      • 4.1. 调用windows静态库文件

        • 4.1.1代码准备:
          C:\Users\john\Desktop\lib_test:
          ├─lib_test.cpp
          └─stdafx.h #这是vc++自己产生的的预编译头,这里我们不关注
        • 4.1.2 lib_test.cpp:
          #include "stdafx.h"
          #include "static_lib.h"
          #pragma comment(lib, "static_lib.lib")
          int _tmain(int argc, _TCHAR* argv[])
          {
          	int a = 0, b = 2, c;
          	c = add(a, b);
          	return 0;
          }
          
        这里需要设置编译器,告诉编译器静态库叫什么名字,在哪个文件夹里。在VS里需要设置地方是项目—属性—VC++ 目录,将static_lib.h所在的路径C:\Users\john\Desktop\static_lib填到包含目录里,将之前生成的static_lib.lib所在路径C:\Users\john\Desktop\static_lib\DEBUG填到库目录里。然后在项目——属性—链接器—输入,将static_lib.lib输入到附加依赖项里(这一步其实等同于lib_test.cpp里的#pragma comment(lib, “static.lib”)这句话,两者二选一即可)。最后编译成功。
      • 4.2. 调用windows动态库文件

        • 4.2.1代码准备:
          C:\Users\john\Desktop\lib_test:
          ├─lib_test.cpp
          └─stdafx.h #这是vc++自己产生的的预编译头,这里我们不关注
        • 4.2.2 lib_test.cpp:
          #include "stdafx.h"
          #pragma comment(lib, "dynamic_lib.lib")
          extern int add(int a, int b);
          int _tmain(int argc, _TCHAR* argv[])
          {
          	int a = 0, b = 2, c;
          	c = add(a, b);
          	return 0;
          }
          
        注意,这里代码中少了一个include,多了一个extern了。在VS里需要设置地方是项目—属性—VC++ 目录,将之前生成的dynamic_lib.lib所在路径C:\Users\john\Desktop\dynamic_lib\DEBUG填到库目录里。然后在项目——属性—链接器—输入,将dynamic_lib.lib输入到附加依赖项里(这一步其实等同于lib_test.cpp里的#pragma comment(lib, “static.lib”)这句话,两者二选一即可)。最后编译成功。运行的时候需要把.dll文件放到生成exe的文件夹里,不然编译成功运行会出错
      • 4.3. 调用linux静态库文件

        • 4.3.1代码准备:
          /home/nvidia/DeepLearning/lib_test:
          └─lib_test.c
        • 4.3.2 lib_test.c:
          #include "static_lib.h"
          int main()
          {
              int a = 0, b = 2, c;
              c = add(a, b);
              return 0;
          }
          
        • 4.3.3 编译:
          gcc lib_test.c -o lib_test -L ../static_lib/ -lstatic_lib -I ../static_lib/
          
        注意,这里编译的时候需要用-I(大写的i)指定头文件所在文件夹位置,用-L指定动态库所在文件夹,用-l(小写的L)指定动态库的名字(去掉名字里最前面的lib)
        • 4.3.4 运行即可成功
      • 4.4. 调用linux动态库文件

        • 4.4.1代码准备:
          /home/nvidia/DeepLearning/lib_test:
          └─lib_test.c
        • 4.4.2 lib_test.c:
          #include "dynamic_lib.h"
          int main()
          {
              int a = 0, b = 2, c;
              c = add(a, b);
              return 0;
          }
          
        • 4.4.3 编译:
          gcc lib_test.c -o lib_test -L ../dynamic_lib/ -ldynamic_lib -I ../dynamic_lib/
          
        注意,这里编译的时候需要用-I(大写的i)指定头文件所在文件夹位置,用-L指定动态库所在文件夹,用-l(小写的L)指定动态库的名字(去掉名字里最前面的lib)
        • 4.4.3 运行报错:
          直接输入./lib_test运行会报错。因为刚才编译的时候可以通过编译参数告诉编译器动态库的位置,但是运行的时候不知道动态库在哪。
        ./lib_test: error while loading shared libraries: libdynamic_lib.so: cannot open shared object file: No such file or directory
        
        通过ldd命令可以查看lib_test需要哪些动态库,可以看到我们的动态库他找不到
        bash huangshiqing@ezviz-W580-G20:~/lib_test$ ldd lib_test linux-vdso.so.1 => (0x00007ffd659e0000) libdynamic_lib.so => not found libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0a01391000) /lib64/ld-linux-x86-64.so.2 (0x00007f0a0175b000)
        • 4.4.4 指定动态库搜索路径:
          动态链接时、执行时搜索路径顺序:
      1. 编译目标代码时指定的动态库搜索路径;
        只在编译环节可以通过命令参数指定
      2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
        通过下面命令临时添加或者在.bashrc中永久添加
        export LD_LIBRARY_PATH=/home/nvidia/DeepLearning/dynamic_lib/:$LD_LIBRARY_PATH
        
      3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径;
        概念参见这里
      4. 默认的动态库搜索路径/lib;
        直接将动态库移到这两个默认会去搜索的路径也可以
      5. 默认的动态库搜索路径/usr/lib。
      • 4.4.5 指定动态库位置后再次运行即成功

      参考链接:https://blog.csdn.net/sunxiaopengsun/article/details/79351025

    展开全文
  • dht11库文件

    千次阅读 2019-06-30 12:28:36
    DHT11.cpp DHT11.h

    DHT11.cpp
    DHT11.h

    展开全文
  • Linux库文件使用与编译

    千次阅读 2018-10-11 17:41:53
    Linux库文件 静态库 在Linux中,以.a为后缀,如libtest.a 直接拷贝函数到二进制映像文件 只需要运行二进制文件,可以直接运行 共享库 在Linux操作系统中,以libxxx.so.x.x为格式命名 可执行文件在开始运行时将...
  • 将99SE库文件转化成AD库文件(.DDB—>.SchLib/.PCBLib) 打开AD17 菜单栏 文件 导入向导 下一步 选择99SE DDB File文件类型,下一步 在文件处理下点击 添加(A) 找到要转化的文件...
  • 算法(第四版)谢路云译书中stdlib库文件

    千次下载 热门讨论 2014-09-17 20:55:46
    ​原因是它的jar包里面没有包结构,当我们导入这个jar包到IDE集成开发的lib中后,我们可以在src目录下的java文件中不用import就可以使用StdOut等它的类,但是当我们创建包之后,比如src/com目录下再使用就不行了,...
  • Keil uVision4 STC库文件

    热门讨论 2013-03-16 10:18:53
    keil uVision4的STC库文件,欢迎下载。感谢老铁们支持! 该文件下载直接可用 该文件下载直接可用 该文件下载直接可用
  • 原文转自 :... 文件目录结构如下 1 dynamiclibapp.c 2 Makefile 3 comm/inc/apue.h 4 comm/errorhandle.c 5 dynamiclib/Makefile 6 dynamiclib/dynamiclib_add.c 7 d
  • ...附加依赖项的是.lib不是.dll,若生成了dll,则肯定也生成lib文件。如果要完成源代码的编译和链接,有头文件和lib就够了。如果要使需要动态连接的程序运行起来,有dll就够了。在开发和调试阶
  • 由于项目需要,用到了openssl提供的一些函数,需要获得库文件,并且,需要32位、64位各自对应的库文件。 获得这些库文件,可以有两种方式: 1、直接从网上下载别人下载好的。①不管是32位还是64位,直接百度,...
  • 本文针对以下问题: 需要导入自建库,不知道入口; 需要修改或者删除自建库,发现怎么操作都没用的; 想要修改官方,或者将...Arduino的导入的原理是将放在一个文件夹或者一个.zip文件中的所有文件复制到某...
  • 链接时库文件的查找顺序如下: 编译时指定的库文件目录(由gcc -L参数指定) 环境变量LIBRARY_PATH指定的目录 系统默认目录:/lib; /usr/lib; /usr/local/lib 一般用户安装的库会安装在/usr/local/lib,系统自带的库...
  • 一、首先为什么要使用pyd文件? 我们知道Python是一门解释型语言,当我们想让...因此当我们想保护我们的源代码(算法保护)或者防止用户篡改源代码时,可以将Python源代码编译生成.pyd库文件或者.so库文件(Windo...
  • arduino自己制作库文件的经历-2018/9/28

    千次阅读 2018-09-28 13:29:16
    新建文件后以下操作:如图 同理在创建一个.h的书签如图 最后效果如下两个书签的名字一定要一样。 下边上三个文件夹的代码,详细讲解我过程中报错的原因。在代码里汉字提醒 主文件 #include "GAME.h" ...
  • gcc编译链接头文件和库文件

    千次阅读 2019-11-24 23:51:31
    -i :指定头文件名字 (一般不使用,而是直接放在**.c 文件中通过#include<***.h> 添加) gcc头文件的搜索路径: 头文件 gcc在编译时如何去寻找所需要的头文件: 头文件的搜索会从-I指定的目录开始; 然后搜索...
  • 本文主要介绍了生成动态库与静态库文件的过程、以及封装和使用库文件的方法。 二、静态库.a与动态库.so的生成与区别 .o文件 :二进制目标文件,可用于打包成库文件也可以链接生成可执行文件; c文件...
  • C/C++ 生成动态库文件(dll)

    千次阅读 2019-02-28 15:20:20
    需要打包的程序可以包含第三方的静态 (.lib)文件,也就是说你可以使用第三方的库函数开发你的功能,然后打包。 一、设计功能模块的入口函数 功能模块的入口函数是指你开发的程序的对外的接口,也就是说生成...
  • 如何生成LIB库文件1.首先准备好生成LIB库文件对应的.c和.h文件,在这里用到的.c和.h文件分别是:"reg303.h""rjwf303_flash.h""rjwf303...
  • 转载于:... Keil 下生成LIB库文件以及如何使用LIB库文件 如何生成LIB库文件? 1. 首先准备好生成LIB库文件对应的.c和.h文件,我这里用到的.c和.h文件分别是: commLib.h:  
  • TI DSP各种库文件

    千次阅读 2017-01-11 16:28:05
    TI DSP各种库文件1 概述主要对各种TI提供的C6000系列DSP芯片的开发支持库进行整理介绍,持续更新。 RTS DSPLIB IMGLIB IQMATH VLIB XDCtool&RTSC 2 RTS官方介绍:Some of the features of C/C++ (such as I/O, ...
  • AD库文件(元件库+封装库+3D模型)

    万次阅读 2019-06-06 14:36:35
    8*8点阵贪食蛇,全教程## 转-自己做的8*8点阵贪食蛇,全教程 原文:  自制8*8点阵贪食蛇全教程  前几天在论坛里...文件到原文下载,原文出自:https://bbs.usoftchina.com/thread-203560-1-1.html
  • visual studio 添加库文件

    千次阅读 2018-05-17 18:40:50
    我在visual studio中使用OpenGL时需要添加额外的库一首先下载库文件,里面将会有一些.h文件和.lib文件,打开visual studio安装目录下打开:D:\program\VS\VC\Tools\MSVC\14.13.26128\include这里面放头文件,最好在...
  • OpenGL库文件工具包(opengl32.lib glu32.lib glaux.lib glew32.lib)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,880,642
精华内容 1,152,256
关键字:

库文件