日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python源码编译 mingw_使用 MinGW 编译 C/C++ 写的 python 扩展

發布時間:2024/8/1 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python源码编译 mingw_使用 MinGW 编译 C/C++ 写的 python 扩展 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

擴展的代碼可以直接使用 python 文檔中的例子 spam。

編譯的話,可以用 distutils,寫 setup.py 腳本即可。

大致的代碼如下:

from distutils.core import setup, Extension

module1 = Extension('spam', sources = ['src/spammodule.c'])

setup ( name = 'PackageName',

version = '1.0',

description = 'This is a demo package',

ext_modules = [module1])

這樣做存在一個問題,官方版的 python 文件是用 VS 系列編譯的,執行需要加上 mingw 相關的參數

python setup.py build -c mingw32

而且 distutils 會檢查 ld 和 dllwrap 的版本信息,很可能就通不過了

Traceback (most recent call last):

File "setup.py", line 8, in

ext_modules = [module1])

File "D:/Progs/Python25/lib/distutils/core.py", line 151, in setup

dist.run_commands()

File "D:/Progs/Python25/lib/distutils/dist.py", line 974, in run_commands

self.run_command(cmd)

File "D:/Progs/Python25/lib/distutils/dist.py", line 994, in run_command

cmd_obj.run()

File "D:/Progs/Python25/lib/distutils/command/build.py", line 112, in run

self.run_command(cmd_name)

File "D:/Progs/Python25/lib/distutils/cmd.py", line 333, in run_command

self.distribution.run_command(command)

File "D:/Progs/Python25/lib/distutils/dist.py", line 994, in run_command

cmd_obj.run()

File "D:/Progs/Python25/lib/distutils/command/build_ext.py", line 264, in run

force=self.force)

File "D:/Progs/Python25/lib/distutils/ccompiler.py", line 1175, in new_compiler

return klass (None, dry_run, force)

File "D:/Progs/Python25/lib/distutils/cygwinccompiler.py", line 292, in __init__

CygwinCCompiler.__init__ (self, verbose, dry_run, force)

File "D:/Progs/Python25/lib/distutils/cygwinccompiler.py", line 84, in __init__

get_versions()

File "D:/Progs/Python25/lib/distutils/cygwinccompiler.py", line 424, in get_versions

ld_version = StrictVersion(result.group(1))

File "D:/Progs/Python25/lib/distutils/version.py", line 40, in __init__

self.parse(vstring)

File "D:/Progs/Python25/lib/distutils/version.py", line 107, in parse

raise ValueError, "invalid version number '%s'" % vstring

ValueError: invalid version number '2.20.1.20100303'

解決方法的話,無非是給 distutils 打個補丁或直接修改代碼,去除這些工具的版本限制。

但是嘗試 install 的時候就無解了。

算了,直接 Makefile 好了,快好省!

#

MODULE_NAME = spam

#

CC = gcc

DLLWRAP = dllwrap

RM = rm -vf

#

PYTHON_DIR = D:/Progs/Python25

LIBS = -L"$(PYTHON_DIR)/libs" -lpython25

INCS = -I"$(PYTHON_DIR)/include"

CFLAGS = $(INCS) -mno-cygwin -mdll -O -Wall

LDFLAGS = $(LIBS) -mno-cygwin -static

DWFLAGS = -mno-cygwin -mdll -static

#

OBJ = spammodule.o

SRC = $(OBJ:.o=.c)

BIN = $(MODULE_NAME).pyd

DEFFILE = $(MODULE_NAME).def

LIBFILE = lib$(MODULE_NAME).a

all: $(BIN)

clean:

$(RM) $(OBJ) $(BIN) $(DEFFILE) $(LIBFILE)

$(BIN): $(OBJ) $(DEFFILE)

$(DLLWRAP) $(DWFLAGS) --output-lib $(LIBFILE) --def $(DEFFILE) -s $< $(LIBS) -o $@

%.o: src/%.c

$(CC) -g -c $< -o $@ $(CFLAGS)

$(DEFFILE): @echo LIBRARY $(BIN)>$(DEFFILE) @echo EXPORTS >>$(DEFFILE) @echo init$(MODULE_NAME)>>$(DEFFILE) .PHONY : installinstall: @cp -vf $(BIN) $(PYTHON_DIR)/Lib/site-packages .PHONY : testtest: $(PYTHON_DIR)/python test.py

總結

以上是生活随笔為你收集整理的python源码编译 mingw_使用 MinGW 编译 C/C++ 写的 python 扩展的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。