使用 SWIG 为 perl 创建 C++ 接口?
Create C++ interface for perl using SWIG?
我正在努力掌握 SWIG。现在,我无法为 perl 构建简单模块。这是我所做的:
example.cpp:
#include <iostream>
void hello()
{
std::cout << "Hello, world!"<< std::endl;
}
example.i:
%module example
%{
#include <iostream>
extern void hello();
%}
extern void hello();
app.pl:
#!/usr/bin/perl
use strict;
use warnings;
use example;
example::hello();
和我的 compile.sh
脚本:
#!/bin/bash -ex
arch=`perl -e 'use Config; print $Config{archlib};'`
swig3.0 -c++ -perl5 example.i
g++ -fPIC -c example.cpp
g++ -fPIC -c example_wrap.cxx -I$arch/CORE -L$arch/CORE
g++ -shared example_wrap.o -o example.so
编译正常 - 未显示任何错误。但是,当我 运行 app.pl
时,出现以下错误:
/usr/bin/perl: symbol lookup error: ./example.so: undefined symbol: _Z5hellov
我试了一下google,但无济于事。到目前为止,一切都失败了。我做错了什么?
我正在使用 Linux Ubuntu x86_64 3.13 内核和 perl 5.18.2
看小破的威力
原因很简单:我没有将 example.o
添加到编译链 - 所以确实没有 hello() 函数的定义!
为了解决这个问题,我将 compile.sh 最后一行更改为:
g++ -shared example.o example_wrap.o -o example.so
我觉得自己很蠢
我正在努力掌握 SWIG。现在,我无法为 perl 构建简单模块。这是我所做的:
example.cpp:
#include <iostream>
void hello()
{
std::cout << "Hello, world!"<< std::endl;
}
example.i:
%module example
%{
#include <iostream>
extern void hello();
%}
extern void hello();
app.pl:
#!/usr/bin/perl
use strict;
use warnings;
use example;
example::hello();
和我的 compile.sh
脚本:
#!/bin/bash -ex
arch=`perl -e 'use Config; print $Config{archlib};'`
swig3.0 -c++ -perl5 example.i
g++ -fPIC -c example.cpp
g++ -fPIC -c example_wrap.cxx -I$arch/CORE -L$arch/CORE
g++ -shared example_wrap.o -o example.so
编译正常 - 未显示任何错误。但是,当我 运行 app.pl
时,出现以下错误:
/usr/bin/perl: symbol lookup error: ./example.so: undefined symbol: _Z5hellov
我试了一下google,但无济于事。到目前为止,一切都失败了。我做错了什么?
我正在使用 Linux Ubuntu x86_64 3.13 内核和 perl 5.18.2
看小破的威力
原因很简单:我没有将 example.o
添加到编译链 - 所以确实没有 hello() 函数的定义!
为了解决这个问题,我将 compile.sh 最后一行更改为:
g++ -shared example.o example_wrap.o -o example.so
我觉得自己很蠢