为Windows 7编译IP2Location Python扩展
我想要安装一个叫做IP2Location的Python扩展,具体信息可以在这里找到:
www.ip2location.com/python.aspx
我试着按照以下网站上的说明进行操作:
eli.thegreenplace.net/2008/06/28/compiling-python-extensions-with-distutils-and-mingw/ boodebr.org/main/python/build-windows-extensions
但是我一直没有成功。问题在于这个Python扩展依赖于另一个C语言库:
www.ip2location.com/c.aspx
当我在cygwin中尝试编译这个库时,出现了以下输出:
make all-recursive
make[1]: Entering directory `/home/ty/Python-IP2Location/C-IP2Location-3.0.0'
Making all in libIP2Location
make[2]: Entering directory `/home/ty/Python-IP2Location/C-IP2Location-3.0.0/li
bIP2Location'
/bin/sh ../libtool --tag=CC --mode=link gcc -mno-cygwin -IiMath/ -g -O2 -modul
e -no-undefined -avoid-version -o libIP2Location.la -rpath /cygdrive/c/MinGW/li
b libIP2Location_la-IP2Location.lo libIP2Location_la-imath.lo
libtool: link: rm -fr .libs/libIP2Location.dll.a
libtool: link: gcc -mno-cygwin -shared .libs/libIP2Location_la-IP2Location.o .l
ibs/libIP2Location_la-imath.o -mno-cygwin -o .libs/libIP2Location.dll -Wl,-
-enable-auto-image-base -Xlinker --out-implib -Xlinker .libs/libIP2Location.dll.
a
.libs/libIP2Location_la-IP2Location.o: In function `IP2Location_ip2no':
/home/ty/Python-IP2Location/C-IP2Location-3.0.0/libIP2Location/IP2Location.c:71
8: undefined reference to `_inet_addr@4'
Creating library file: .libs/libIP2Location.dll.a
collect2: ld returned 1 exit status
make[2]: *** [libIP2Location.la] Error 1
make[2]: Leaving directory `/home/ty/Python-IP2Location/C-IP2Location-3.0.0/lib
IP2Location'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/ty/Python-IP2Location/C-IP2Location-3.0.0'
make: *** [all] Error 2
我在Windows 7 32位上运行的是Python 2.6.3。我有MS Visual Studio 2008(不过我不知道怎么用),当然还有cygwin和MinGW。
如果有人能提供帮助或建议,我将非常感激。
2 个回答
1
试着在链接命令中加上 -lws2_32
这个选项。
顺便提一下,还有一个 纯Python库 可以通过IP地址获取国家信息。
2
好的,完整的解决方案是:
- 下载 stdint.h 文件,并把它放到 IP2Location C 库的文件夹里:http://msinttypes.googlecode.com/svn/trunk/stdint.h
- 打开命令提示符(dos 窗口),执行 "C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"
- 在同一个命令提示符下执行 "nmake /f Makefile.win"
- 进入 Python 扩展的文件夹,执行 "set LINK=/nod:msvcrt.lib"
- 最后执行标准的 "python setup.py install"
关于 "set LINK=/nod:msvcrt.lib" 的建议要感谢 Tim Roberts,他来自 Providenza & Boekelheide, Inc (probo.com)。他很乐意在 python win32 邮件列表上回答我的求助。谢谢你,Tim!