1 def模块定义文件
在使用开源库libx265时,因x265项目的头文件x265中有如下的宏定义
#ifdef X265_API_IMPORTS #define X265_API __declspec(dllimport) #else #define X265_API #endif
当使用libx265动态库时,因没有定义X265_API_IMPORTS宏,也没有定义相关的模块定义文件,导致在链接时,总是提示对应函数链接不成功错误。
解决方案就是在项目中添加对应的模块定义文件。
另外,如果是编译64bit的libx265动态库,需要将工程的平台修改成x64。具体方法是在属性也的配置管理器中进行配置
最后,修改目标计算机为X64,否则因目标不匹配而无法通过编译。
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\n"); } int lib_int = 10;
模块定义文件lib.def
EXPORTS
lib_printf
lib_int DATA
工程属性设置
使用动态库中全局变量,必须使用 _declspec(dllimport)导入
#include "lib.h" #include <stdio.h> extern int _declspec(dllimport) lib_int; int main() { lib_printf(); printf("lib int [%d]\n", lib_int); return 0; }