serf编译
姬雪松
2023-12-01
Serf的编译:
编译serf前,需要先安装好openssl,scons,和zlib
Openssl的安装见openssl安装文档。
Zlib的安装见zlib安装文档。
Scons的安装:
scons APR=/usr/local/apr/bin/apr-1-config APU=/usr/local/apr/bin/apu-1-config OPENSSL=/usr/local/ssl
scons
安装路径(windows默认安装路径:C:\Python*\Lib\site-packages)
# python setup.py install --standard-lib
C:\Python27\Scripts下的
scons-2.5.1.bat
编译:
C:\Python27\Scripts > scons –
出现问题:
C:\Documents and Settings\phill>scons
scons: *** No SConstruct file found.
File "C:\Python26\Lib\site-packages\scons-2.0.1\SCons\Script\Main.py", line 834,
in _main 路径设置错误
需要在有SConstruct文件的目录下运行这个命令,类似于,需要在有Makefile的目录下运行make是一个道理。
C:\SVN\src-trunk\serf>
scons APR=c:\svn\apr APU=c:\svn\apr-util OPENSSL=c:\svn\openssl PREFIX=c:\svn\src-trunk\serf ZLIB=c:\svn\zlib
scons APR=”c:\svn\apr” APU=”c:\svn\apr-util” OPENSSL=”c:\svn\openssl” PREFIX=”c:\svn\src-trunk\serf” ZLIB=”c:\svn\zlib”
Serf编译过程中出现的问题:
deflate_buckets.obj : error LNK2019: 无法解析的外部符号 _inflateEnd,该符号在函数 _serf_deflate_destroy_and_data 中被引 用
deflate_buckets.obj : error LNK2019: 无法解析的外部符号 _crc32,该符号在函数 _serf_deflate_read 中被引用
deflate_buckets.obj : error LNK2019: 无法解析的外部符号 _inflate,该符号在函数 _serf_deflate_read 中被引用
deflate_buckets.obj : error LNK2019: 无法解析的外部符号 _inflateInit2_,该符号在函数 _serf_deflate_read 中被引用
libserf-1.dll : fatal error LNK1120: 4 个无法解析的外部
fatal error LNK1120: 6 个无法解析的外部命令error LNK2019: 无法解析的外部符号 _deflate
虽然已经包含了zlib\zconf.h相关的文件和路径和相关的动态库文件,但是还是会报错
解决方法:
zlib库的导出函数原型,如:ZEXTERN intZEXPORT deflateEnd OF((z_streamp strm));
注意红色的ZEXPORT ,其原型在zconf.h文件里面定义:
#ifndef ZEXPORT
# define ZEXPORT
#endif
默认的ZEXPORT宏,只是个空符号罢了,而实际是其应该表示函数的调用方式。
--------------------------------------------------------------------------------------------------------------------------------------------------------------
解决方法:
在zconf.h文件将ZEXPORT宏的定义改成下面的形式即可:
#ifndef ZEXPORT
# define ZEXPORT WINAPI
#endif
加serf重新编译:
编译svn工程的命令:
Svn编译创建工程python gen-make.py -t dsp --with-zlib=..\zlib --with-serf=serf --with-apr=..\apr --with-apr-util=..\apr-util --with-apr-iconv=..\apr-iconv --with-sqlite=..\sqlite-amalgamation --with-openssl=..\openssl
增加serf之后
需要添加 --with-serf=serf 编译