2020年重点工作是掌握激光打标开源软件,开发现场应用的工业打标软件。项目开发任务包括3部分:
教辅系统主要工作大纲(暂定)
经验总结
VS2017社区版导入开源软件总结
动态链接库DLL与静态链接库LIB
库是资源集合,它能够用于开发应用程序。一个库通常由例程、函数、类、值和类型构成。在链接过程(通常由链接器完成),库(libraries)和执行表(executables)彼此引用。根据例程何时被加载到目标应用程序,库文件分为静态库和动态库。相应地,LIB文件是静态链接的库,而DLL文件是动态链接的库。
什么是DLL?
动态链接库DLL是一个由微软公司开发的共享库实现。它使用后缀名.dll、.ocx、或者.drv,并且它们被应用在微软视窗和OS/2操作系统中。常规的DLL文件采用后缀.dll。包含ActiveX控件的库采用后缀名.ocx。遗留系统驱动文件采用后缀名.drv。DLL文件格式与视窗可执行文件EXE(Portable Executable files on 32-bit/64-bit Windows, and New Executable on 16-bit Windows)一样。因此,代码、数据和资源的任何组合都能够包含在DLL文件中(就象可执行文件一样)。实事上,具有DLL文件格式的数据文件被称为资源DLLs。图标(icon)库(后缀名.icl)和字体文件(font)库(后缀名.fon和fot)都是资源DLLs的例子。
被称为节(section)的组件构成了一个DLL,并且每个节都有自己的属性,例如只读/可写和可执行和不可执行。代码节是可执行的,而数据节是不可执行的。代码节是共享的,而数据节是私有的。那就意味着所有的进程使用该DLL是使用相同的代码拷贝,而每个进程都拥有自己的数据拷贝。视窗的主要动态库是 kernel32.dll,它包含有关视窗的基函数(与文件和内存相关的功能)。 组件对象模型COM (Component Object Model)是DLL扩展到面向对象编程OOP(Object Oriented Programming)。传统的DLLs比COM文件更加容易使用。
什么是LIB?
LIB文件是静态库(也就是静态链接库)。LIB文件包含了一个有关例程、外部函数和变量的集合。LIB文件在编译时(与运行时对应)被解析生成。代码实际上被拷贝到目标应用程序中。一个编译器,链接器或者绑定器执行这个解析任务并生成一个对象文件和一个可执行文件。这个过程被称为静态构造过程。
DLL与LIB之间的差异?
LIB库在编译时被调用,而DLL库仅能够在运行时被调用。LIB文件明显比DLL文件大许多。DLL文件一个常见的问题是版本问题。当DLL代码被改变时,版本问题就了出现:应用程序使用一个DLL错误的版本。对LIB文件来说,版本不是一个问题。根据可重用性原则,当编写一个新版本系统或者全新的应用程序时,DLLs比LIBs好。
MAVEN学习心得
软件项目管理软件maven于2020年元月15日开始只支持https安全链接共享库了,以前低版本的maven3.0.3修改setting.xml,修改项目pom.xml的http协议为https,但是没有任何响应,返回错误代码501,不能链接到共享库了。后来,在maven官方网站上看到了这样的解释:super pom是任何项目的pom的父文件,它的配置可以被这些项目的pom继承。定位了netbeans内置的maven安装位位置:netbeans/java/maven/lib/maven-model-builder-3.0.5,用7zip打开这个jar包,里面有这样一目录结构:org/apache/maven/model,在这里终于找到这个super pom-4.0.0.xml文件了,打开它后,把相应的http协议改为https。如下所示:
central
Central Repository
https://repo.maven.apache.org/maven2
default
false
central
Central Repository
https://repo.maven.apache.org/maven2
default
false
never
最后,成功构建了项目。检查apache-maven-3.6.3的super pom后发现它已经是https协议了。
增加vs2017支持
vs2017影响编译的改动,主要是定义了snprintf,以及编译器版本升级到14。需要对wxWidgets作如下修改,才能使用vs2017进行编译。
在文件%WXWIN%\include\msvc\wx\setup.h,增加版本支持如下:
#elif _MSC_VER == 1916
#define wxCOMPILER_PREFIX vc140
在文件%WXWIN%\include\wx\compiler.h,增加版本支持如下:
#elif __VISUALC__ < 2000
#define __VISUALC14__
在下面三个文件中,找到snprintf的宏定义,注释掉
%WXWIN%\src\tiff\libtiff\tif_config.h
%WXWIN%\src\tiff\libtiff\tif_config.vc.h
%WXWIN%\src\zlib\gzguts.h
编译库文件
运行“开始|所有程序|visual studio 2017|VS2017 开发人员命令提示”,切换到%WXWIN%\build\msw。
生成32位静态库DEBUG版
nmake /f makefile.vc
库文件生成在%WXWIN%\lib\vc_lib,文件名含d表示debug版
生成32位静态库RELEASE版
nmake /f makefile.vc BUILD=release
库文件生成在%WXWIN%\lib\vc_lib,文件名不含d与debug版区分
生成32位动态库DEBUG版
nmake /f makefile.vc SHARED=1
库文件生成在%WXWIN%\lib\vc_dll,文件名含d表示debug版
生成32位动态库RELEASE版
nmake /f makefile.vc BUILD=release SHARED=1
库文件生成在%WXWIN%\lib\vc_dll,文件名不含d与debug版区分
运行“开始|所有程序|visual studio 2017|适用于VS2017的x64本机工具命令提示”,切换到%WXWIN%\build\msw。
生成64位静态库DEBUG版
nmake /f makefile.vc TARGET_CPU=X64
库文件生成在%WXWIN%\lib\vc_x64_lib,文件名含d表示debug版
生成64位静态库RELEASE版
nmake /f makefile.vc BUILD=release TARGET_CPU=X64
库文件生成在%WXWIN%\lib\vc_x64_lib,文件名不含d与debug版区分
生成64位动态库DEBUG版
nmake /f makefile.vc SHARED=1 TARGET_CPU=X64
库文件生成在%WXWIN%\lib\vc_x64_dll,文件名含d表示debug版
生成64位动态库RELEASE版
nmake /f makefile.vc BUILD=release SHARED=1 TARGET_CPU=X64
库文件生成在%WXWIN%\lib\vc_x64_dll,文件名不含d与debug版区分
以上vs2017生成wxWidget库文件,参考网文:Visual Studio 2015编译wxWidgets
技术网文链接