tinycc为windows编译包

tinycc的Python项目详细描述


tinycc(或tcc)是一个小型、快速的c编译器,能够编译python 可以作为python模块加载或生成 可以通过cTypes加载。此版本包括用于32位和 64位窗口。此版本不支持MacOS和Linux。

编译器版本:0.9.26 2013-02-16

编译器和python接口的安装很简单:

pip install tinycc

编译器的完整文档可在http://bellard.org/tcc获得。 源文件和二进制文件可从https://savannah.nongnu.org/projects/tinycc/获得。 tinycc python包托管在https://github.com/SasView/tinycc

tcc是tcc.exe可执行文件的完整路径。注意,可执行文件 路径可以包含空格,因此在用作部分时必须用引号括起来 操作系统命令。

tcc_version是编译器版本。

python扩展

将tinycc作为编译器选项添加到setup.py:

import tinycc.distutils

完成后,您可以使用:

python setup.py build --compiler=tinycc
<>请注意,TyyCC不支持C++,因此它不能用于替换。 对于Python或MIW作为Python的通用编译器的MS VisualC++ 安装。

还要注意,编译器不完全支持c99和一些结构 哪个编译(例如,从函数调用返回一个结构)不能 好好工作。在将tinycc设置为 为您的python包推荐的编译器。

共享库

构建dll:

from tinycc import compile
dll_path = compile("hello.c")

这将在与“hello.c”相同的目录中创建“hello.dll”,引发 如果编译失败,则返回runtimeerror。异常包含编译器 输出。使用compile(source,target)控制dll的路径。

<> >为了更灵活,可以直接调用编译器:

import os
import subprocess
from tinycc import TCC

source, target = "hello.c", "hello.dll"
command = [TCC, "-shared", "-rdynamic", "-Wall", source, "-o", target]
try:
    # need shell=True on windows to keep console box from popping up
    subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as exc:
    raise RuntimeError("compile failed.\n%s\n%s"%(command_str, exc.output))
if not os.path.exists(target):
    raise RuntimeError("compile failed.  File is in %r"%source)

使用data_files收集捆绑tinycc所需的数据文件 在py2exe包中。这会将编译器放在tinycc数据目录中 在py2exe生成的library.zip旁边。以下内容应出现在 py2exe版本的setup.py:

import tinycc

data_files = []
...
data_files.extend(tinycc.data_files())
...
setup(
    ...
    data_files = data_files,
    ...
    )

注意:如果您将tcc.exe放在不寻常的地方(即不在tinycc中 包,而不是在py2exe生成的库或exe旁边的tinycc数据中, 然后可以将环境变量tcc_root设置为目录 包含tcc.exe。

发行说明

2017-11-20 R 1.1

  • 支持python包的distutils构建

2016-05-31 R 1.0.2

  • 支持为Windows 32和Windows 64构建DLL

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
未检测到“空格”的java ASCII码   音频如何在Java中设置SourceDataLine的音量   java MyBatissSpringBoot无法使用作为bean注入的数据源   Java字谜递归列表<List<String>>仅存储空列表<Strings>   java显示30px高的JPanel,然后用minecraft填充剩余空间   java JOGL平滑度   Java:按完整与否对1d对象数组进行排序   arraylist仅当java结构不存在时才将对象添加到java结构中   无法初始化java渲染库在安卓 studio 4.1.1上出现错误   java SpringBoot ClassCastException   java解析文本文件,基于字数   java=运算符引发异常   java使点可拖动并存储新坐标JavaFx   JavaWebSphereApplicationServer:EJB模块和JMS路由器