我对与solaris ,hp ,windows这三个平台的动态库的实现,进行了探索,对于soloaris,hp等Unix平台来讲,主要是make文件的制作,而Windows下还需要对类头进行修饰.

  本列主要实现了一个动态库和一个调用动态库的运行程序,动态库包括mytime.h ,mytime.cpp , 在windows下还需要dllt1.cpp ,这个包含动态库的DllMain入口函数,

  StdAfx.cpp ,stdAfx.h是与预编译相关的文件. 运行程序包括dy.cpp 包括对动态库的调用。

  下面先谈Unix下的编译指令.

  一. hp平台下

  在hp下使用hp自带的aCC编译器

rm *.o
rm *.sl
aCC +z mytime.cpp //+z生成动态库需要的*.o文件

aCC -b -o libmy.sl mytime.o //-b生成动态库 ,-o libmy.sl 表示生成动态库的名称为libmy.sl
aCC dy.cpp libmy.sl //用dy.cpp libmy.sl生成可执行程序,默认为a.out,也可以用 –o指定名称

  二. solaris平台下

  在soloaris下用workshop带的 CC .

CC -c mytime.cpp //-c 生成动态库需要的*.o文件
CC -G -o libmy.so mytime.o -b生成动态库,名称为libmy.so
CC -Bdynamic -o myee libmy.so dy.cpp //生成可执行程序myee

ln -s /export/home/hurh/tdll/libmy.so /lib // solaris下在运行前要用root用户配置动态库libmy.so

  下面再谈谈Windows下的动态库需要考虑的问题,用VC编译。

  主要谈动态库头文件mytime.h 的声明

#ifndef MYTIME_H
#define MYTIME_H

#ifndef WIN32
 #define DLLT_API __declspec(dllexport)
#else
 #ifdef JESTERDLL
  #define DLLT_API __declspec(dllexport)
 #else
  #define DLLT_API __declspec(dllimport)
  #pragma comment(lib, "dllt1.lib")
 #endif
#endif

struct DATETYPE
{
 int year;
 int mon;
 int day;
};

struct TIMETYPE
{
 char hour;
 char min;
 char sec;
};

int DLLT_API getdate(DATETYPE *d);
int DLLT_API gettime(TIMETYPE *t);

class DLLT_API gqlass{
 public:
  int ineid;
  void setneid(int neid);
  gqlass();
  ~gqlass();
};

#endif

  宏WIN32, JESTERDLL 需要在动态库编译中用指令 –D 指定。 对于动态库需要导出的类或函数需要用修饰__declspec(dllexport),而对于引用程序需要用__declspec(dllimport) 修饰,这就是我们联合WIN32, JESTERDLL所达到的目的, 动态库的名称为dllt1.dll 如果有了 #pragma comment(lib, "dllt1.lib") 就不需要在make文件指定需要连接dllt1库了.

  附部分源代码:

//mytime.cpp
#include"stdafx.h"
#include "time.h"
#include "mytime.h"

int getdate(DATETYPE *d)
{
 long ti;
 struct tm *tm;
 time(&ti);
 tm=localtime(&ti);
 d->year=tm->tm_year+1900;
 d->mon=tm->tm_mon+1;
 d->day=tm->tm_mday;
 return 0;
}

int gettime(TIMETYPE *t)
{
 long ti;
 struct tm *tm;
 time(&ti);
 tm=localtime(&ti);
 t->hour=tm->tm_hour;
 t->min=tm->tm_min;
 t->sec=tm->tm_sec;
 return 0;
}
gqlass::gqlass()
{
 ineid=0;
}
gqlass::~gqlass()
{

}

void gqlass::setneid(int neid)
{
 ineid=neid;
}

//dy.cpp

#include"stdafx.h"
#include "stdio.h"
#include "../dllt1/mytime.h"
int main()
{
 DATETYPE d;
 TIMETYPE t;
 void *dp;
 char *error;

 puts("动态链接库应用示范");

 getdate(&d); /* 调用此共享函数 */
 printf("当前日期: %04d-%02d-%02d/n",d.year,d.mon,d.day);

 gettime(&t); /* 调用此共享函数 */
 printf("当前时间: %02d:%02d:%02d/n",t.hour,t.min,t.sec);
 gqlass gq;
 printf("before setneid gq.ineid=%d/n",gq.ineid);
 gq.setneid(123);
 printf("after setneid gq.ineid=%d/n",gq.ineid);

 return 0;
}

谈跨平台C++动态连接库的实现相关推荐

  1. 怎么把dll库写成MATLAB接口,如何在Matlab中应用动态连接库接口技术

    1 引言 Matlab是当前应用最为广泛的数学软件,具有强大的数值计算.数据分析处理.系统 分析.图形显示甚至符号运算等功能.利用这一完整的数学平台,用户可以快速实现十分 复杂的功能,极大地提高工程分 ...

  2. 在VB 中调用动态连接库

    在VB 中调用动态连接库   2001-11-08· · ··yesky 1 2 3 4 5 6 7 8  下一页 作为一种简单易用的Windows开发环境,Visual Basic从一推出就受到了广 ...

  3. 动态连接库的两种方式

    动态连接库的两种方式? 答案:调用一个DLL中的函数有两种方法: 1.载入时动态链接(load-time dynamic linking),模块非常明确调用某个导出函数,使得他们就像本地函数一样.这需 ...

  4. QT动态连接库的编写

    1.QT动态链接库的编写流程 1.1 首先在Qt Creator中创建一个动态连接库Matrix,添加类名,生成一个类(matrix.h和matrix.cpp)和一个matrix_global.h的文 ...

  5. 用g++编译生成动态连接库*.so的方法及连接

    用g++编译生成动态连接库*.so的方法及连接 1.动态库*.so的编译 这里我们用到4个文件,它们分别为:SoDemoTest.h.one.cpp.two.cpp.three.cpp.它们的内容如下 ...

  6. VS2013 生成sqlite3动态连接库

    一,生成sqlite3动态连接库 1,去sqlite官网上下载最近的sqlite源码包,解压后得到四个文件:shell.c,sqlite3.c,sqlite3.h,sqlite3ext.h 此处还需要 ...

  7. [转]Linux下的动态连接库及其实现机制

    摘 要:本文介绍了动态连接库的优点,详细阐述了x86体系结构上Linux系统的编译器 .连接器.加载器如何使用多种重定位方式来实现该功能 关键词:动态连接库:Linux:重定位 The Impleme ...

  8. CorelDRAWX4的VBA插件开发(三十一)使用C++制作动态连接库DLL辅助VBA构键强大功能-(5)在VBA中动态调用DLL文件

    我们先来看一下动态调用的截图 先上代码 '静态调用 Public Declare Function wodedll Lib "E:\VS-DLL\conglingkaishi\Debug\C ...

  9. 动态连接库和静态链接库

    文章出处:http://www.cnblogs.com/gaoyihan/p/4723332.html 本文参考了以下博客:      1. http://blog.csdn.net/gamecrea ...

最新文章

  1. linux 内核发布时间,求问Linux最新内核版本以及发布日期。
  2. 超燃开学演讲:不读书不吃苦,你要青春干嘛
  3. Python中的__new__(new函数)
  4. RS485接口电磁兼容设计方案
  5. java nio doug_深入的聊聊 Java NIO
  6. Windows 7服务器版 2008 R2安装图解
  7. 够快云库轻松解决文件复制速度过慢
  8. 怎么让图片铺满手机屏幕_手机版Photoshop怎么把图片铺满屏幕?
  9. 三阶齐次线性方程求通解_三阶常系数齐次线性差分方程解的分类
  10. EXCEL取小数点数值
  11. 8.17.6. Constructing Ranges
  12. 算术编码原理及其python实现
  13. 1972年图灵奖--埃德斯加·狄克斯特拉生平
  14. Java封装FushionCharts
  15. NSG44273低侧驱动IC
  16. ecshop支持mysql_ecshop安装不支持MySQL
  17. kitty终端ranger预览图片
  18. 《微服务设计》(二)---- 演变式架构师
  19. 201709-2 公共钥匙盒 ccf
  20. 学Linux的第一天

热门文章

  1. 面试题,如何改进一款产品
  2. 互联网晚报 | 11月7日 星期日 | EDG夺得《英雄联盟》S11总冠军;拼多多推出“超拼夜”系列;VMware与戴尔完成分拆...
  3. 互联网晚报 | 9月30日 星期四 | 五菱与B站跨界合作;支付宝向“云闪付”开放支付场景;平安健康险上线“药划算”...
  4. 2020智慧零售行业研究报告
  5. cclink 和发那科机器人_FANUC机器人焊枪工具坐标系设定
  6. python判断正数负数_python判断正负数方式
  7. 作者: ​李国杰,中国工程院院士。现任中国科学院计算技术所首席科学家,国家信息化专家咨询委员会信息技术与新兴产业专委会副主任。...
  8. 作者:李海昌(1984-),男,中国科学院软件研究所助理研究员
  9. 【程序设计】模块化程序设计
  10. mongodb or and 条件拼凑 Query.And Query.Or