2009-11-03 2 views
4

Я написал небольшое расширение Python, которое связывает, компилирует и статически связывается с небольшой библиотекой C с одним дополнительным файлом .S (ассемблер). Расширение Extutils() не распознает .S по умолчанию. Есть ли хороший способ скомпилировать этот файл, или я должен просто отключить его до make? Прямо сейчас я скомпилирую код C только для немного более медленной библиотеки.Может ли distutils Python компилироваться .S (сборка)?

ответ

2

Я не знаю, как это новое, но Extension класса имеет extra_objects аргумент, который я нашел можно указать сборочные файлы. Так, например, мой setup.py выглядит примерно так:

example_module = Extension('_example', 
    extra_compile_args = ['-Wall', '-g', '-std=c++11'], 
    sources=['something.cpp'], 
    extra_objects=['asm_amd64.s']) 

я проверил, и если вы проверяете сгенерированную библиотеку nm -D example.so функции сборки правильно собраны и связаны, если вы включите его в extra_objects, но они не связаны, если вы не включили его в этот аргумент. Так что это работает.

2

Как распределено, distutils не знает о коде сборки, и я не знаю о его расширениях, которые позволяют автоматически обрабатывать его. В подобной ситуации я всегда создавал библиотеку отдельно (с C и сборкой по мере необходимости и выполнимо) и использовал только полученный .a с setup.py.

Смежные вопросы