Для вызова из perl в C обычно компилируют разделяемую, а не статическую библиотеку из своего кода c, а затем загружают ее в интерпретатор perl с помощью модуля XSLoader
или DynaLoader
.
Чтобы потом можно было вызывать код C из пространства Perl, есть много способов.Наиболее распространенным является написание чего-то, называемого XSUB
s, которое имеет интерфейс на стороне perl, сопоставляет соглашения о вызовах perl с соглашениями о вызовах C и вызывает функции C.Эти XSUB обычно также связаны с общей библиотекой, которая будет загружена в perl, и написаны на языке XS, который подробно документирован в perlxs и perlxstut .
Есть и другие способы создания этого слоя-оболочки, такие как различные генераторы кода XS, а также SWIG.Но вы также можете вызывать функции C напрямую, используя NCI
.Perl также имеет много таких.P5NCI
- один из примеров, модуль ctypes, разработанный в программе Google Summer of Code этого года, - другой.
Другой связанный метод, который, вероятно, следует упомянуть здесь, это Inline::C
, а другие модулиInline семья.Они позволяют вам писать код на других языках прямо в Perl и вызывать его.Inline :: C просто создает код XS и загружает результат в интерпретатор.