如何将静态C对象文件链接到Perl?

Pra*_*odh 5 perl static object

我有一个用C编写的函数(在HelloWorld.c文件中说).我想编译它,需要创建一个staic对象文件HelloWorld.a

最后,我需要从Perl程序(HelloWorld.pl)中调用它.

raf*_*afl 9

要从perl调用C,通常从他的c代码编译共享的,而不是静态的库,然后使用XSLoaderor DynaLoader模块将其加载到perl解释器中.

那么能够从perl空间调用C代码有很多方法.最常见的是编写一个名为XSUBs的东西,它有一个perl-side接口,将perl调用约定映射到C调用约定,并调用C函数.这些XSUB通常也链接到将被加载到perl中的共享库,并使用称为XS的语言编写,该语言在perlxsperlxstut中有详细记录.

还有其他方法来构建包装层,如各种XS代码生成器,以及SWIG.但是你也可以使用一个直接调用C函数NCI.Perl也有很多.这P5NCI就是其中一个例子,今年的Google Summer of Code计划开发的ctypes模块是另一个.

这里应该提到的另一个相关技术是Inline::C和Inline系列的其他模块.它们允许您直接在perl中编写其他语言的代码,并调用它.在引擎盖下Inline :: C只是构建XS代码并将其结果加载到解释器中.