1、背景
因为很多情况下,我们是不给别人或者甲方爸爸源码的,所以就要将源码编译成动态或者静态链接库来调用。在windows下面开发,当然用vs是最方便的了,虽然在linux下有了vs code,但是小白表示还没有摸索明白各种环境设置是怎么回事,不如windows下面的vs来的可视化好。所以,先看看windows下开发C++的一个超级小白简单的例子,如何建立链接库工程,生成动态链接库,然后如何建立测试这个链接库的测试工程;以及如果不在同一解决方案下建立测试工程,如何从外部测试这个动态链接库。
因为也需要开发Ubuntu下面的东西,所以也比较了下。在Ubuntu下分别利用qt,codeblocks完成类似工作。下面看到dummy的代码烦请见笑了,这只是一条简单的体验纪录。。。
2、Windows下-----vs创建share lib并测试
2.1、创建链接库工程
(1)创建
打开vs2013,选择“New Project”,在弹出的对话框中选择“Win32 project”或者“Win32 console application”。注意不要选则“Static(Windows Store apps)” 或者“DLL(Windows Store apps)”。
选择好工程的路径,取名字,默认勾选“Create directory for solution”, 点击OK。
接下来的对话框,选择“Next”。
设置向导接下来注意啦!在Application Setting这一页中,Application type这里选择“DLL”。至于下面Additional options,我当时选了“export symbols”,没选这个好像也没有少了啥(myDll)。。。,如果选择“empty project”就是一个完全空的工程,不包含任何文件。其它保持默认,点击“Finish”。
创建的库工程叫做simpleDLL2,结构如下所示:
其中,vs自动创建的文件用红框标注了。
stdafx.h,stdafx.cpp-----(来自百度百科):英文全称为:Standard Application Framework Extensions(标准应用程序框架的扩展)。头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。
因为我不用MFC,所以这个应该是可以删掉的。
targetver.h-----定义程序运行的环境。
simpleDll2.h, simpleDll2.cpp-----vs为工程创建的,这里可以理解为接口代码写在这里。后面贴代码分析。
dllmain.cpp 里面放了dll的入口函数。目前不知道这个具体有啥用,网上查了有的说是起到初始化作用。反正我没有用到,不知道删了这个cpp可以不?反正我把入口函数全部注释掉,编译后测试仍然正确。
interior.h,interior.cpp----我自己创建的新的类,希望将一些内部函数放在这里,不希望别人看到源码。
(2)结构及源码
下面具体说说这个project的结构。我们希望将所有接口函数的实现放在simpleDll2.cpp中,这个里面的接口函数调用其它cpp比如interior.cpp中的函数实现具体的功能。当编译完成时,我们可以将接口的cpp和h文件以及lib和dll给用户,而interior源码不给,保留了自己的核心技术。
首先放上simpleDll2.h:
// The following ifdef block is the standard way of creating macros which make exporting
// from a DLL simpler. All files within this DLL are compiled with the SIMPLEDLL2_EX