将C库添加到c ++ 11 distutils项目中

问题描述 投票:0回答:1

我有一个c ++ 11项目,我想将其作为软件包导出以供python脚本使用。我的代码使用我下载并添加到项目中的lzfse C文件。该项目需要在MacOS和Linux上进行编译。我创建了以下setup.py文件:

from distutils.core import setup, Extension

module1 = Extension('car_mechanic',
                    extra_compile_args=["-std=c++11"],
                    sources=['car_mechanic_py.cpp', 'png_parse.cpp', 'car_parse.cpp', 'lodepng.cpp', 'logger.cpp'
                             , 'lzfse/src/lzfse_fse_py.c', 'lzfse/src/lzfse_decode_py.c', 'lzfse/src/lzfse_encode_py.c'
                            , 'lzfse/src/lzfse_decode_base_py.c', 'lzfse/src/lzfse_encode_base_py.c'
                            , 'lzfse/src/lzvn_decode_base_py.c', 'lzfse/src/lzvn_encode_base_py.c'])

setup(name='car_mechanic',
       version='1.0',
       description='This package parses and changes the Asset.car ios apps use',
       ext_modules=[module1])

然后使用python setup.py build

此解决方案有2个问题:

  • -std=c++11标志不适用于MacOS下的.c文件,因为它运行不支持它的clang。它还在Linux上发出警告]
  • 对于lzfse库中的每个.c文件,我需要添加一个#include <python2.7/Python.h>。由于我不想更改原始文件,因此我为每个lzfse_XXX_py.c创建了一个lsfse_XXX.c文件,该文件仅执行以下操作:

#include <python2.7/Python.h> #include "lzfse_XXX.c"

将lzfse转换为我的python包使用的库的更好方法? Setuptools是否可以解决我的问题?

python setuptools setup.py distutils python-packaging
1个回答
0
投票

使用@phd的答案:

git clone --recursive https://github.com/dimkr/pylzfse
cd pylzfse
python setup.py build

从模块中删除了所有lzfse文件,然后将其复制到lzfse.so并在导入模块之前将其导入

© www.soinside.com 2019 - 2024. All rights reserved.