谈跨平台C++动态连接库的实现
我对与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++动态连接库的实现相关推荐
- 怎么把dll库写成MATLAB接口,如何在Matlab中应用动态连接库接口技术
1 引言 Matlab是当前应用最为广泛的数学软件,具有强大的数值计算.数据分析处理.系统 分析.图形显示甚至符号运算等功能.利用这一完整的数学平台,用户可以快速实现十分 复杂的功能,极大地提高工程分 ...
- 在VB 中调用动态连接库
在VB 中调用动态连接库 2001-11-08· · ··yesky 1 2 3 4 5 6 7 8 下一页 作为一种简单易用的Windows开发环境,Visual Basic从一推出就受到了广 ...
- 动态连接库的两种方式
动态连接库的两种方式? 答案:调用一个DLL中的函数有两种方法: 1.载入时动态链接(load-time dynamic linking),模块非常明确调用某个导出函数,使得他们就像本地函数一样.这需 ...
- QT动态连接库的编写
1.QT动态链接库的编写流程 1.1 首先在Qt Creator中创建一个动态连接库Matrix,添加类名,生成一个类(matrix.h和matrix.cpp)和一个matrix_global.h的文 ...
- 用g++编译生成动态连接库*.so的方法及连接
用g++编译生成动态连接库*.so的方法及连接 1.动态库*.so的编译 这里我们用到4个文件,它们分别为:SoDemoTest.h.one.cpp.two.cpp.three.cpp.它们的内容如下 ...
- VS2013 生成sqlite3动态连接库
一,生成sqlite3动态连接库 1,去sqlite官网上下载最近的sqlite源码包,解压后得到四个文件:shell.c,sqlite3.c,sqlite3.h,sqlite3ext.h 此处还需要 ...
- [转]Linux下的动态连接库及其实现机制
摘 要:本文介绍了动态连接库的优点,详细阐述了x86体系结构上Linux系统的编译器 .连接器.加载器如何使用多种重定位方式来实现该功能 关键词:动态连接库:Linux:重定位 The Impleme ...
- CorelDRAWX4的VBA插件开发(三十一)使用C++制作动态连接库DLL辅助VBA构键强大功能-(5)在VBA中动态调用DLL文件
我们先来看一下动态调用的截图 先上代码 '静态调用 Public Declare Function wodedll Lib "E:\VS-DLL\conglingkaishi\Debug\C ...
- 动态连接库和静态链接库
文章出处:http://www.cnblogs.com/gaoyihan/p/4723332.html 本文参考了以下博客: 1. http://blog.csdn.net/gamecrea ...
最新文章
- linux 内核发布时间,求问Linux最新内核版本以及发布日期。
- 超燃开学演讲:不读书不吃苦,你要青春干嘛
- Python中的__new__(new函数)
- RS485接口电磁兼容设计方案
- java nio doug_深入的聊聊 Java NIO
- Windows 7服务器版 2008 R2安装图解
- 够快云库轻松解决文件复制速度过慢
- 怎么让图片铺满手机屏幕_手机版Photoshop怎么把图片铺满屏幕?
- 三阶齐次线性方程求通解_三阶常系数齐次线性差分方程解的分类
- EXCEL取小数点数值
- 8.17.6. Constructing Ranges
- 算术编码原理及其python实现
- 1972年图灵奖--埃德斯加·狄克斯特拉生平
- Java封装FushionCharts
- NSG44273低侧驱动IC
- ecshop支持mysql_ecshop安装不支持MySQL
- kitty终端ranger预览图片
- 《微服务设计》(二)---- 演变式架构师
- 201709-2 公共钥匙盒 ccf
- 学Linux的第一天
热门文章
- 面试题,如何改进一款产品
- 互联网晚报 | 11月7日 星期日 | EDG夺得《英雄联盟》S11总冠军;拼多多推出“超拼夜”系列;VMware与戴尔完成分拆...
- 互联网晚报 | 9月30日 星期四 | 五菱与B站跨界合作;支付宝向“云闪付”开放支付场景;平安健康险上线“药划算”...
- 2020智慧零售行业研究报告
- cclink 和发那科机器人_FANUC机器人焊枪工具坐标系设定
- python判断正数负数_python判断正负数方式
- 作者: ​李国杰,中国工程院院士。现任中国科学院计算技术所首席科学家,国家信息化专家咨询委员会信息技术与新兴产业专委会副主任。...
- 作者:李海昌(1984-),男,中国科学院软件研究所助理研究员
- 【程序设计】模块化程序设计
- mongodb or and 条件拼凑 Query.And Query.Or