我想尝试使用Perl,但需要与我编写的另一个应用程序进行通信。我有一个用C ++编写的接口库,它包含用于在我的应用程序中设置/获取参数的套接字通信和接口协议。
我想将Perl与Apache一起用于提供网页以配置我的应用程序。我需要知道如何让Perl与我的界面库交谈。
答案 0 :(得分:7)
哦主啊,如果你是Perl的新手。你不想看XS(我不是Perl的新手,我不想看XS)。有关从Perl调用C和C ++的更为温和的介绍,请参阅Inline::C或Inline::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 perlxs和perldoc perlxstut以了解有关XS界面的更多信息。如果你想反过来(从C调用Perl),也要通读perldoc perlguts和perldoc perlembed。
当你遇到特定的问题时,给SO另一个叫喊声,有人可以帮助你。 :)
答案 2 :(得分:3)
如果您选择不使用内联-C路由,Perl会built in support for sockets,A great tutorial on doing IPC以及一些objects来帮助处理套接字(另外,google将为您提供有关使用perl套接字的许多其他教程。如果您能够/愿意重新实现套接字通信部分,您可能甚至不需要C / C ++。
答案 3 :(得分:1)
如果您不想使用Inline :: CPP,则需要为您的C ++库创建一个模块。可以使用h2xs:h2xs --autogen-xsubs
自动完成。首先从CPAN安装C :: Scan。
答案 4 :(得分:1)
首先,我要说XS是一组相对较少的关键字,它使得从perl包装C库更容易(参见perlxstut和perlxs)。但是,为了使用它,你必须学习perl API(参见perlapi),这反过来要求对perl编译器的工作方式有一个浅层的了解(参见perlguts,有点过时但仍然非常有用的perl guts illustrated)。这同时需要学习很多东西。简而言之:
话虽如此,如果你想包装一个C ++库,请看一下CPAN上的ExtUtils::XSpp模块。它附带一个非常简单的例子。该模块并不是那么老,而且还在不断改进,但它使得包装C ++变得更加方便。
PS:如果您计划一次学习所有内容,请通过示例进行学习。查看Dean Roehrich's cookbooks。也许使用一些简单的XS模块作为模型:Parse::ExuberantCTags,Math::FFTW或CPAN上的众多其他模块之一。