一、下载相关库文件
获取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可以安装直接编译好的文件。Expat和OpenSSL的安装路径如下图,并且把OpenSSL的路径添加进了环境变量里面。
然后cmake-gui添加apr-util的库点击configure会有如下提示:
勾选Search选项右边的Grouped和Advanced,并修改依赖库的路径如下:
继续点击发现还是会报如下的错误:
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按钮成功,然后继续点Generate和Open 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编译关键有两点:
- 如果报错可以看Makefile里面到底是哪里出错了,要么屏蔽掉要么修改依赖库的位置。
- 如果编译过程中提示缺少库文件,用everything搜下直接复制过去。