首页 > 编程语言 >perl 通过 swig 调用 c++ 代码

perl 通过 swig 调用 c++ 代码

时间:2023-05-23 19:33:22浏览次数:48  
标签:调用 swig c++ perl wrap example

perl 通过 swig 调用 c++代码

  Swig 是一个软件开发工具,可以简化不同语言与 C/C++ 的交互(直接在其它语言的代码中调用 C/C++ 的代码)。
  记录一下成功用 perl 调用 c++ 代码的例子。

环境

操作系统:centos 7.9
perl: version 5.16.3
swig: version 2.0.10
g++: version 9.4.0

文件

需要的文件

example.cc:

#include <iostream>

class ExampleClass {
public:
  void sayHello(const char* name) {
    std::cout << "Hello, " << name << "!" << std::endl;
  }
};

example.i:

%module example

%{
#include "example.cc"
%}

%include "example.cc"

example.pl:

use strict;
use example;

my $example = new example::ExampleClass();
$example->sayHello("join");

编译

  1. 首先执行 swig -c++ -perl example.i 命令。
    生成 example.pmexample_wrap.cxx 文件

  2. 再执行 g++ -c -fPIC example_wrap.cxx -o example_wrap.o -I/usr/lib64/perl5/CORE 命令。
    生成 example_wrap.o 文件;-I后面的路径是 perl 的文件路径,可以通过执行 perl -e 'use Config; print "$Config{archlib}\n";' 命令获取,如图:
    img

  3. 执行 g++ -shared example_wrap.o -o example.so 命令,生成动态库 example.so

  4. 执行 perl example.pl,可以看到输出:img

  成功调用 c++ 代码。有兴趣的可以试试把生成动态库换成生成静态库
  这只是一个简单的例子,swig 还可以结合其它脚本语言使用,能实现非常强大的功能。

swig 官网

标签:调用,swig,c++,perl,wrap,example
From: https://www.cnblogs.com/AngleLin/p/17426170.html

相关文章

  • 泛型编程(GP)和C++标准模板库(STL)
    GenericProgramming(GP)泛型编程,就是使用template(模板)为主要工具来编写程序level0:使用C++标准库level1:认识C++标准库level2:良好使用C++标准库level3:扩充C++标准库C++StandardLibraryC++标准库,编译器带的,可以看到sourcecode至于StandardTemplateLibrary->STL标......
  • C++ 线程安全和可重入函数
    线程安全线程安全是指在多线程环境下,同一函数或函数库被不同线程调用,不会出现数据不一致的情况。如何确保一个函数是线程安全的:1.对共享资源加锁。2.从逻辑上进行设计,保证资源的访问修改不会冲突。一般情况下我们使用加锁的方式保证线程安全,具体加锁操作有互斥锁、条件变量、......
  • C++
    实现一个类模板,它可以接受一组数据,能对数据排序,也能输出数组的内容。每行输入的第一个数字为0,1,2或3:为0时表示输入结束;为1时表示将输入整数,为2时表示将输入有一位小数的浮点数,为3时表示输入字符。如果第一个数字非0,则接下来将输入一个正整数,表示即将输入的数据的数量。templat......
  • c++打卡第三十五天
    一、最大公约数1、问题描述 2、设计思路本题中可以有三种算法,其中我们提供第三种辗转相除法的代码,第一种是从1开始,由于最大公约数可以是最小的那个数,所以我们循环条件到两个之中的小数,如果这个数满足可以整除两个整数,遍历到最大的那个数时,打印出来。第二种是从小数开始循环,当......
  • C++ 模板 使用 enum 代替 typename
    enumtestEnum{A,B,C};template<testEnumC>classTestClassTemplate{public:voidprint(){printf("common\n");}};template<>classTestClassTemplate<A>{public:voidprint(){printf(&quo......
  • SQLite3 客户端程序,Win32 SDK ,C/C++
    1 WIn32SDK程序,尽量放在一个文件中,主要用到Tree,ListView,Edit控件。2 把控件封装成类,但不封装窗口回调函数。类实例为全局变量,方便消息回调函数调用执行。这样做最简单。3 Edit控件处理按键输入,模仿shell执行SQL查询4打开数据库文件时若没有此文件则新建,否则打开,打开......
  • c++的前世今生
    C++语言是本贾尼·斯特劳斯特卢普在1982年发明的,早期版本被称为CwithClasses,之后在1983年更名为C++。C++语言在发明后很快就获得了广泛的应用,由于其具有高效、灵活和兼容性强的特点,成为了许多领域的首选编程语言。在计算机科学和工程领域,C++语言被广泛用于开发操作系统、......
  • 【重学C++】04 | 说透C++右值引用(上)
    文章首发【重学C++】04|说透C++右值引用、移动语义、完美转发(上)引言大家好,我是只讲技术干货的会玩code,今天是【重学C++】的第四讲,在前面《03|手撸C++智能指针实战教程》中,我们或多或少接触了右值引用和移动的一些用法。右值引用是C++11标准中一个很重要的特性。第一次接......
  • C++ 手搓 CNN 卷积神经网络
    代码请自取https://github.com/xoslh/CNN-MNIST-CPP-1卷积神经网络-CNN的基本原理​ 卷积神经网络(ConvolutionalNeuralNetworks,CNNs)是一种深度学习算法,特别适用于图像处理和分析。其设计灵感来源于生物学中视觉皮层的机制,是一种强大的特征提取和分类工具。1.1Layers......
  • c++模板例题
    一、问题描述。1 编写一个程序,使用类模板对数组元素进行排序,倒置、查找和求和2 具有对数组元素进行排序,倒置、查找和求和功能,3 然后产生类型实参分别为int型和double型的两个模板类,4 分别对整型数组与双精度数组完成所要求的操作 实现代码: #include<iostream> using name......