leptonica依赖的相关库的生成
写在前面,笔者观摩大量大佬的教程完成的本篇文章,反正我是成功了,电脑Win10+64位,VS2017版本。用到的源码由于试过太多来源,部分已经忘记哪儿来的了,有空我也传份上来。哈哈。
至于为此学习过的文章,下面都给出连接了,大家需要自取。
话说我这算原创吗?我先选原创了,哈哈,第一篇原创,打字好累哦。
注意:使用cmake-gui要勾选grouped和advanced
cmake编译必须要有 CMakelist.txt,它是CMake脚本代码和配置参数的载体,源代码目录中没有它的话,工程就不可能使用CMake的配置程序来完成自动Makefile脚本的生成工作
注意:使用nmake编译必须要有makefile.vc文件
1.zlib
(1)下载zlib
(2)打开cmake-gui,源为zlib目录【E:/leptonica_library/zlib-1.2.11】,目标为zlib内新建的build文件夹【E:/leptonica_library/zlib-1.2.11/build】
(3)configure(设置),configure(保存),generate(生成)
(4)找到build里的zlib.sln文件,用vs2017打开,生成——生成解决方案(或者右击install——生成)
注意:分别在debug和release模式下生成
(5)编译的库zlib.lib出现在build/release文件夹内【E:\leptonica_library\zlib-1.2.11\build\Release】(也有.dll)
注意:zlibd.lib在debug文件夹内(也有.dll)
2.lpng
【步骤https://www.cnblogs.com/dilex/p/10732639.html】
(1)下载lpng
(2)打开cmake-gui,源为lpng目录【E:/leptonica_library/lpng1637】,目标为lpng内新建的build文件夹【E:/leptonica_library/lpng1637/build】
(3)configure(设置)
(4)将zlib目录配置进去
zlib_include_dir:zlib的目录【E:/leptonica_library/zlib-1.2.11】
zlib_library_release:release模式下生成的zlib.lib的目录【E:/leptonica_library/zlib-1.2.11/build/Release/zlib.lib】
(5)configure(保存),generate(生成)
(6)找到build里的lpng.sln文件,用vs2017打开,生成——生成解决方案(或者右击install——生成)
注意:分别在debug和release模式下生成
!!!出现问题,找不到zconf.h,就把它从build里面复制到外面(自己瞎试的,因为提示找不到,但是在build里面有)
(7)编译的库libpng16.lib出现在build/release文件夹内【E:\leptonica_library\lpng1637\build\Release】(也有.dll)
注意:libpng16d.lib在debug文件夹内(也有.dll)
3.jpeg
【下载http://www.ijg.org/files/】
(1)下载jpeg
(2)打开cmake-gui,源为jpeg目录【E:/leptonica_library/jpeg-9a】,目标为jpeg内新建的build文件夹【E:/leptonica_library/jpeg-9a/build】
(3)configure(设置)
!!!出问题了,好像是因为下载的JPEG包里面没有cmakelists.txt
(4)https://blog.csdn.net/qq_31359085/article/details/103822347
https://blog.csdn.net/weixin_30266885/article/details/97155645
于是决定根据这两篇文章,用nmake的方法编译库,看我接下来步骤
!!!出错的话,看这篇https://blog.csdn.net/sean4m/article/details/60143222
(5)进入jpeg-9a,将目录下的jconfig.vc复制一份并更名为jconfig.h
(6)developer command prompt for vs 2017【vs2017的开发者命令提示符】,(不要用cmd,后来比较了一下 cmd会有一些错误提示)进入jpeg-9a,(这里取决于要产生的库的版本,由于之前的都是32位的库,所以我在这里也生成32位的库),然后键入:nmake -f makefile.vc
!!!cmd和vs的开发人员工具命令的区别:(https://bbs.csdn.net/topics/392569692)
系统自带的cmd就是运行cmd.exe
如果是vs的开发人员工具命令行则会初始化很多环境变量
比如可以让方便的找到编译器,连接器和include,lib的地址等等
(7)在这里会提示未找到文件win32.mak,win10的系统里是没有这个东西的,可以从GitHub上下载到。解压后将Win32.Mak放到jpeg-9a目录下,或者可以将makefile.vc中的第12行改成win32.mak的路径。
(8)再次尝试nmake,
!!!出问题了,无法找到一些.h头文件,根据【https://blog.csdn.net/sean4m/article/details/60143222】判断是vs2017环境变量的设置问题,按网上教程【https://blog.csdn.net/kaige_zhao/article/details/80315697】试了一下
(9)再次尝试nmake,出现了一溜烟的长篇大论的代码,看不懂,但最后面是
LINK : warning LNK4010: 子系统版本号 5.0 无效;假定为默认子系统版本
LINK : fatal error LNK1181: 无法打开输入文件“kernel32.lib”
NMAKE : fatal error U1077: “E:\visualstudioIDE\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x86\link.EXE”: 返回代码“0x49d”
Stop.
!!!发现是前面vs2017的LIB环境变量少了一个的缘故,在电脑里搜索kernel32.lib,把它的路径加进去。
Path:
E:\visualstudioIDE\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x86
E:\visualstudioIDE\Common7\IDE (这个教程里没加)
LIB:
E:\visualstudioIDE\VC\Tools\MSVC\14.16.27023\lib\x86
E:\Windows Kits\10\Lib\10.0.10240.0\ucrt\x86
E:\Windows Kits\10\Lib\10.0.17763.0\um\arm64
E:\Windows Kits\10\Lib\10.0.17763.0\ucrt\arm64
E:\Windows Kits\10\Lib\10.0.17763.0\ucrt\x86(在cmd里运行的时候出错加进来的,估计没用,删掉以后在开发者命令里试了,不需要它)
INCLUDE:
E:\visualstudioIDE\VC\Tools\MSVC\14.16.27023\include
E:\Windows Kits\10\Include\10.0.10240.0\ucrt
(10)再次nmake -f makefile.vc
出现一堆代码,提示LINK : warning LNK4010: 子系统版本号 5.0 无效;假定为默认子系统版本,但是生成了libjpeg.lib
所以随它去吧。如果不对的话,请大家务必告诉我T^T
4.tiff
(1)下载tiff
(2)打开cmake-gui,源为tiff目录【E:/leptonica_library/tiff-4.0.9】,目标为tiff内的build文件夹【E:/leptonica_library/tiff-4.0.9/build】
(3)configure(设置),configure(保存),generate(生成)
!!!如果之前弄过不同目录的,file——delete cache
(4)找到build里的tiff.sln文件,用vs2017打开,生成——生成解决方案(或者右击install——生成)
注意:分别在debug和release模式下生成
(5)编译的库tiff.lib出现在build/libtiff/release文件夹内【E:\leptonica_library\tiff-4.0.9\build\libtiff\Release】(也有.dll)
注意:tiffd.lib在debug文件夹内(也有.dll)
5.giflib
(1)下载giflib
!!!太惨了,又是没有cmakelists.txt的,还没有makefiles.vc,用vs编译吧
【参考https://blog.csdn.net/zdyueguanyun/article/details/49906071那篇教程我没看懂,还是请教了人才弄明白的,我太难了T^T】下面我的步骤就是这个方法(vs编译)的实现过程。
(2)在资源管理器里搜索#include <stdbool.h>,注意勾选高级选项里面的“文件内容”,这样能够搜索文件内是否有要搜的内容
(3)全选搜索出来的文件,拖到notepad++里面,搜索——替换
查找目标:#include <stdbool.h>
替换为//#include <stdbool.h>\n #ifndef __cplusplus\n typedef int bool;\n #define false 0\n #define true 1\n #endif
注意:勾选“全词匹配”,不勾选“循环查找”,选择查找模式“扩展”,点击“替换所有打开文件”
补充:原来应该替换成的代码如下,为了能够显示为多行,所以加了\n
//#include <stdbool.h>
#ifndef __cplusplus
typedef int bool;
#define false 0
#define true 1
#endif
(4)文件——全部保存。将替换好的文件保存下来。
!!!下面进入静态库建立
(5)新建静态库工程:vs2017新建——项目——visualc++——跨平台——Windows通用——静态库(通用windows)
(6)右键Resources Files——添加——现有项
(7)弹出的窗口中找到源码目录下,分别输入*.h、*.c文件查找到所有的.h,.c,.cpp文件,加入到此工程中
(8)生成——重新生成解决方案
提示几十个错误:在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include “pch.h””
解决方法:项目——XXXX属性——C/C++——预编译头——预编译头(选择“不使用预编译头”)
(9)生成——重新生成解决方案
提示几十个错误:fopen:this function or variable may be unsafe.consider using fopen_s instead.……还有类似的strerror、wcstombs……等等许多。
解决方法:项目——XXXX属性——C/C++——常规——SDL检查(选择“否(/sdl)”)
(10)生成——重新生成解决方案
提示多个错误:无法打开包括文件unisd.h
解决方法:把包含是unistd.h的地方,都替换成io.h
提示错误:无法打开包括文件getopt.h
解决方法:下载getopt,添加到vc的include(里面放头文件)和lib(里面放静态库)文件夹。
(11)生成——重新生成解决方案,现在应该有lib生成了。