windows用VS2019下编译log4cxx日志库

一、下载相关库文件

获取log4cxx源码包:http://logging.apache.org/log4cxx/index.html
获取依赖库apr和apr-util源码包:http://archive.apache.org/dist/apr/apr-1.2.11-win32-src.zip
http://archive.apache.org/dist/apr/apr-util-1.2.10-win32-src.zip

在这里插入图片描述

编译apr-util会提示缺少expat的库文件,expat的下载地址:https://github.com/libexpat/libexpat/releases
发现里面有直接的安装包,可以直接安装,安装把路径添加到环境变量中。

先编译apr和apr-util,然后再log4cxx中把依赖库的路径填进去。
编译apr-util需要依赖OpenSSL,通过下面的路径直接下载编译好的openssl。
https://slproweb.com/products/Win32OpenSSL.html

二、CMake编译试错

1.编译apr库

编译apr的库,很顺利,直接cmak-gui打开编译就行了。这次编译生成的文件夹统一在库目录下build_win里面。编译win32程序。
在这里插入图片描述
cmake成功点open Project按钮打开Vs工程,编译生成需要的依赖库
在这里插入图片描述

2、编译apr-util库

这个util库依赖太多了,有apr库和什么expat库,还有oenssl。还好expat库和OpenSSL可以安装直接编译好的文件。ExpatOpenSSL的安装路径如下图,并且把OpenSSL的路径添加进了环境变量里面。
在这里插入图片描述
在这里插入图片描述
然后cmake-gui添加apr-util的库点击configure会有如下提示:
在这里插入图片描述
勾选Search选项右边的GroupedAdvanced,并修改依赖库的路径如下:
在这里插入图片描述
继续点击发现还是会报如下的错误:

CMake Error at CMakeLists.txt:36 (MESSAGE):
  APR include directory E:\log4cxx\apr-1.7.0\include is not correct.

打开CMakeList.txt文件,找到第36行,发现makefile代码如下:
在这里插入图片描述

如图所示只要include目录下没有apr.h就报错。后面通过everything搜索,发现在apr的生成目录中有apr.h的文件,然后把他复制到apr-1.7.0的include目录下。
在这里插入图片描述
复制过去后点configure按钮成功,然后继续点GenerateOpen Project,打开vs工程文件并编译生成apr-util的库文件。

3.最后一步,编译log4cxx

终于到了最后一步了,继续用cmak-gui加载log4cxx的makefile文件。点击Configure按钮依然报错,这里要多点几次configure,我是点了三次,第一次提示缺少apr的库,第二次提示缺少apr-util,第三次提示缺少expat。可能每次makefile执行通过才给下个提示。三次需要修改依赖库如下图所示:
在这里插入图片描述
修改完成后点击Configure还是会报错
在这里插入图片描述
看了一下提示是什么src/Test目录,心想没什么用,就找到src/test/cpp/CMakeLists.txt这个文件把依赖的什么sed_app、zip_app和gzip_app给屏蔽掉了。
在这里插入图片描述
屏蔽掉保存然后Configure->Generate->Open Project。
在这里插入图片描述
编译log4cxx发现由如下报错,提示找不到apu.h的头文件。
在这里插入图片描述
于是将apr-util编译生成目录里面的apu.h文件复制到apr-util-1.6.1\include目录下,编译成功。
在这里插入图片描述
在这里插入图片描述

三、总结

cmake编译关键有两点:

  1. 如果报错可以看Makefile里面到底是哪里出错了,要么屏蔽掉要么修改依赖库的位置。
  2. 如果编译过程中提示缺少库文件,用everything搜下直接复制过去。

参考:

1.windows下安装Openssl的方法
2.Windows下编译apr、apr-util


版权声明:本文为u013394556原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。