zoukankan      html  css  js  c++  java
  • 2016-03-15:关于VS中模块定义文件

    1 def模块定义文件

    在使用开源库libx265时,因x265项目的头文件x265中有如下的宏定义

    #ifdef X265_API_IMPORTS
    #define X265_API __declspec(dllimport)
    #else
    #define X265_API
    #endif

    当使用libx265动态库时,因没有定义X265_API_IMPORTS宏,也没有定义相关的模块定义文件,导致在链接时,总是提示对应函数链接不成功错误。

    解决方案就是在项目中添加对应的模块定义文件。

    image

    另外,如果是编译64bit的libx265动态库,需要将工程的平台修改成x64。具体方法是在属性也的配置管理器中进行配置

    image

    最后,修改目标计算机为X64,否则因目标不匹配而无法通过编译。

    image

    2 引用动态库中全局变量

    示例如下:创建动态库,使用def文件导出变量和函数

    动态库头文件lib.h

    #ifndef _LIB_H
    #define _LIB_H
    
    void lib_printf();
    
    #endif

    动态库实现文件lib.c,并且定义全局变量

    #include "lib.h"
    #include <stdio.h>
    
    void lib_printf()
    {
        printf("this is lib_printf
    ");
    }
    
    int lib_int = 10;

    模块定义文件lib.def

    EXPORTS
        lib_printf
        lib_int DATA

    工程属性设置

    image

    使用动态库中全局变量,必须使用 _declspec(dllimport)导入

    #include "lib.h"
    #include <stdio.h>
    
    extern int _declspec(dllimport) lib_int;
    
    int main()
    {
        lib_printf();
        printf("lib int [%d]
    ", lib_int);
        return 0;
    }

    3 MSDN官方示例

    image

    https://msdn.microsoft.com/zh-cn/library/8fskxacy.aspx

  • 相关阅读:
    洛谷P2334
    线性基
    6.28 模拟赛解题报告
    左偏树
    哈夫曼树 Huffman
    CSP/NOIP 之前还需要学/复习的东西
    CF718C
    6.13 模拟赛结题报告
    关于模拟退火
    『笔记』网络流
  • 原文地址:https://www.cnblogs.com/zhouLee/p/5280014.html
Copyright © 2011-2022 走看看