要从Perl调用C++静态库,您需要使用XS模块。XS是一个扩展模块,允许Perl代码与C/C++代码交互。以下是一个简单的步骤来实现这个目标:
cpan install ExtUtils::MakeMaker
cpan install ExtUtils::CppGuess
创建一个名为mylib.h
的头文件:
#ifndef MYLIB_H
#define MYLIB_H
int add(int a, int b);
#endif
创建一个名为mylib.cpp
的C++源文件:
#include "mylib.h"
int add(int a, int b) {
return a + b;
}
使用C++编译器创建一个静态库:
g++ -c mylib.cpp
ar rcs libmylib.a mylib.o
创建一个名为MyLib.xs
的文件:
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "mylib.h"
MODULE = MyLib PACKAGE = MyLib
int
add(a, b)
int a
int b
CODE:
RETVAL = add(a, b);
OUTPUT:
RETVAL
创建一个名为MyLib.pm
的文件:
package MyLib;
use strict;
use warnings;
use ExtUtils::MakeMaker;
WriteMakefile(
NAME => 'MyLib',
VERSION => '0.01',
ABSTRACT => 'Perl interface to C++ static library',
CONFIGURE_REQUIRES => {
'ExtUtils::MakeMaker' => '0',
},
PREREQ_PM => {
'ExtUtils::MakeMaker' => '0',
},
LIBS => ['-L. -lmylib'],
XS => {
'MyLib.xs' => 'mylib.cpp',
},
);
perl Makefile.PL
make
#!/usr/bin/perl
use strict;
use warnings;
use MyLib;
my $result = MyLib::add(5, 7);
print "Result: $result\n";
这个例子演示了如何从Perl代码调用C++静态库。请注意,这个例子仅适用于Unix系统,并且需要C++编译器。在Windows上,您需要使用不同的编译器和链接器选项。
领取专属 10元无门槛券
手把手带您无忧上云