使用Perl编译C库?

时间:2009-10-23 22:13:39

标签: c++ perl apache

我想尝试使用Perl,但需要与我编写的另一个应用程序进行通信。我有一个用C ++编写的接口库,它包含用于在我的应用程序中设置/获取参数的套接字通信和接口协议。

我想将Perl与Apache一起用于提供网页以配置我的应用程序。我需要知道如何让Perl与我的界面库交谈。

5 个答案:

答案 0 :(得分:7)

哦主啊,如果你是Perl的新手。你不想看XS(我不是Perl的新手,我不想看XS)。有关从Perl调用C和C ++的更为温和的介绍,请参阅Inline::CInline::CPP。只有当你想要开始传递或返回复杂的数据结构时(甚至可能不是那时),才需要深入钻进XS接口。

use Inline C => Config => LIBS => '-L/<yourlibpath> -l<yourlib>';

$x = my_library_function_that_returns_an_int_or_double($integer_arg,$string_arg);

答案 1 :(得分:3)

看起来您想要与Perl的C库进行通信。您需要阅读perldoc perlxsperldoc perlxstut以了解有关XS界面的更多信息。如果你想反过来(从C调用Perl),也要通读perldoc perlgutsperldoc perlembed

当你遇到特定的问题时,给SO另一个叫喊声,有人可以帮助你。 :)

答案 2 :(得分:3)

如果您选择不使用内联-C路由,Perl会built in support for socketsA great tutorial on doing IPC以及一些objects来帮助处理套接字(另外,google将为您提供有关使用perl套接字的许多其他教程。如果您能够/愿意重新实现套接字通信部分,您可能甚至不需要C / C ++。

答案 3 :(得分:1)

如果您不想使用Inline :: CPP,则需要为您的C ++库创建一个模块。可以使用h2xsh2xs --autogen-xsubs自动完成。首先从CPAN安装C :: Scan。

答案 4 :(得分:1)

首先,我要说XS是一组相对较少的关键字,它使得从perl包装C库更容易(参见perlxstutperlxs)。但是,为了使用它,你必须学习perl API(参见perlapi),这反过来要求对perl编译器的工作方式有一个浅层的了解(参见perlguts,有点过时但仍然非常有用的perl guts illustrated)。这同时需要学习很多东西。简而言之:

  • XS本身=&gt;
  • perlapi =&gt;中等难度
  • perl inner workings =&gt;很难
  • 以上所有内容同时=&gt;哎哟

话虽如此,如果你想包装一个C ++库,请看一下CPAN上的ExtUtils::XSpp模块。它附带一个非常简单的例子。该模块并不是那么老,而且还在不断改进,但它使得包装C ++变得更加方便。

PS:如果您计划一次学习所有内容,请通过示例进行学习。查看Dean Roehrich's cookbooks。也许使用一些简单的XS模块作为模型:Parse::ExuberantCTagsMath::FFTW或CPAN上的众多其他模块之一。