Могут ли distutils Python скомпилировать .S (сборку)?

StackOverflow https://stackoverflow.com/questions/1664812

  •  12-09-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Я не знаю, насколько это ново, но 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, но они не будут связаны, если вы не включите его в этот аргумент.Так что, похоже, это работает.

Другие советы

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

По этому поводу существует открытый запрос функции: http://bugs.python.org/issue2942

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top