动态库编译VS及codelite平台

前言:关于动态库与静态库已经显示调用与隐性调用在如下链接有详细解答,本文是动态库创建与隐性调用

利用__declspec(dllexport)和__declspec(dllimport)在Windows平台编写和使用DLL的小例子_AlbertS Home of Technology-CSDN博客___declspec(dllimport)

1VS平台,在原有解决方案新建工程时,会创建文件夹,所以可以直接新建工程,然后把工程拷贝出来放到原有解决方案的目录下,新建工程的类型在VS2005上会直接影响编译的通过,应按照如下方式创建:

动态库选择DLL,其他代码选择控制台应用程序,不要选择windows程序,因为是用win32编译。

windows可以使用预编译来添加宏定义,在结合条件编译就可以实现对代码的不同环境下的不同执行方式,提高通用性。

2,codelite下的交叉编译

创建工程选择MSVCDLL的动态库项目如图

设置文件的生成路径与名称,这里是交叉编译,linux平台,所以是用/来分隔目录路径 

头文件write_ht.h代码如下

#ifndef WRITE_HT//条件编译,防止多次编译文件,该宏一般写成头文件名字的大写便于识别
#define WRITE_HT
#include "xrdk/libxrdk.h"//包含复用库,使用对应的函数和类型,用于跨平台编译
#include "Def.h "     
#include <stdio.h>
#include <string.h>
#if  defined(EMWRITETEST_EXPORTS)//在预处理中定义宏EMWRITETEST_EXPORTS,触发导出关键字
#define MYAPI xrEXPORT
#else
#define MYAPI  xrIMPORT
#endif
extern "C"  xrvoid_t MYAPI em_write();//声明导出函数
#endif 

 源文件如下:

#include "write_ht.h"

#ifdef __unix
#define fopen_s(pFile,filename,mode) ((*(pFile))=fopen((filename),  (mode)))==NULL
#endif//这里的条件编译使得fopen_S函数在Linux下顺利编译
MYAPI xrvoid_t em_write()
{

	em_report rpt;
	rpt.appid = 0x01;
	FILE *fp =NULL;
	fopen_s(&fp,"mntlog_a.cime","a");
	if(fp==NULL)
	{

		printf("Ãüþ´ò¿ªÃ§°Ã");
	}
	else
	{

		fprintf(fp,"\n%d",rpt.appid);
	}
	fclose(fp);
}

 在调用函数中包含动态库头文件,在设置里设置头文件路径,动态库文件路径和文件名称

注:在工程习惯中,习惯在SRC源码文件夹中存放.h和.cpp的代码文件,然后又会把.h头文件集中存放在一个include文件夹方便调用,此时在创建了工程后,添加头文件和源文件时,源文件从SRC里添加,头文件从include里添加不要从SRC文件夹添加,防止调用函数无法找到头文件(一般主函数都会设置调用include文件夹里的头文件)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值