
使用binutils的nm和dlltool,您应该能够为gcc重建库:
echo EXPORTS > python32.defnm python32.lib | grep " T _" | sed "s/.* T _//" >> python32.defdlltool --input-def python32.def --dllname python32 --output-lib libpython32.a
python_test.c:
#include "Python.h"int main(int argc, char *argv[]) { Py_Initialize(); PyRun_SimpleString("from time import time,ctimen" "print('Today is',ctime(time())n)"); Py_Finalize(); return 0;}编译:
gcc -Wall -IC:Python32include -LC:Python32libs -o python_test.exe python_test.c -lpython32
测试:
C:python_test.exeToday is Mon Jul 18 08:50:53 2011
编辑 :如果您想跳过自己在x64上构建它,则可以从Christoph
Gohlke的Python扩展软件包的非官方Windows二进制文件中下载几个版本的版本。
编辑 :这是一个基于Tools / msi / msi.py中分发的现有功能的Python版本:
import subprocessimport warningsimport reNM = 'x86_64-w64-mingw32-nm'DLLTOOL = 'x86_64-w64-mingw32-dlltool'EXPORT_PATTERN = r'^[_]{1,2}imp_(?P<export>.*) in pythond+.dll'def build_libpython(ver, nm=NM, dlltool=DLLTOOL, export_pattern=EXPORT_PATTERN): pylib = 'python%s.lib' % ver pydef = 'python%s.def' % ver pydll = 'python%s.dll' % ver libpy = 'libpython%s.a' % ver warning = '%s failed - ' + '%s not built' % libpy match_export = re.compile(export_pattern).match cmd_nm = [nm, '-Cs', pylib] cmd_dlltool = [dlltool, '--dllname', pydll, '--def', pydef, '--output-lib', libpy] with open(pydef, 'w') as f: f.write('LIBRARY %snEXPORTSn' % pydll) p_nm = subprocess.Popen(cmd_nm,stdout=subprocess.PIPE, universal_newlines=True) for line in sorted(p_nm.stdout): m = match_export(line) if m: f.write(m.group('export') + 'n') if p_nm.wait() != 0: warnings.warn(warning % nm) return False if subprocess.call(cmd_dlltool) != 0: warnings.warn(warning % dlltool) return False return True例如:
import osfor n in (27, 33, 35): pylib = 'python%s.lib' % n if os.path.exists(pylib): build_libpython(n) pydef = 'python%s.def' % n lc_def = sum(1 for line in open(pydef)) libpy = 'libpython%s.a' % n lc_lib = sum(1 for line in os.popen('ar -t %s' % libpy)) assert lc_def == lc_lib欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)