[SWIG] 源码编译与阅读

2024-02-13 11:48
文章标签 编译 源码 阅读 swig

本文主要是介绍[SWIG] 源码编译与阅读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文链接:https://www.yuque.com/cpptd/swig/gpxboh
SWIG系列笔记:https://www.yuque.com/cpptd/swig

文章目录

    • Windows编译
        • 一、安装PCRE
        • 二、安装BISON
        • 三、build SWIG
        • 附:错误bison.exe: m4: No such file or directory
        • 附:无法解析的外部符号
    • 源码调试
        • 查看String的值

Windows编译

一、安装PCRE

PCRE库提供了正则表达式匹配功能,它使用与Perl 5一致的语法语义。它的API即包括native的API,又包含一套包装了POSIX regular API的API。PCRE是免费的,也可用于商业用途。

  1. 下载地址:http://sourceforge.net/projects/pcre/
  2. 官网:http://www.pcre.org/

下载之后,用cmake编译、安装即可。

二、安装BISON

bison是一个GNU自由软件,用于自动生成语法分析器。根据自定义的语法规则,你可以分析大部分语言的语法,小到桌面计算器,大到复杂的编程语言

  1. 官方文档:http://www.gnu.org/software/bison/manual/bison.html
  2. 下载链接:http://gnuwin32.sourceforge.net/packages/bison.htm

下载完,把bin目录配置到path中

三、build SWIG

请添加图片描述

D:\install\pcre-8.45\include
D:/install/pcre-8.45/lib/pcred.lib

附:错误bison.exe: m4: No such file or directory
2>D:\install\GnuWin32\bin\bison.exe: m4: No such file or directory

请添加图片描述

  1. 解决方案一:重新开机
  2. 解决方案二:bison.exe 文件中似乎有一些错误。我用在这个 zip 文件中找到的那个替换了它。
    1. http://marin.jb.free.fr/bison/bison-2.4.1-modified.zip
    2. 资料来源:http : //marin.jb.free.fr/bison/

附:无法解析的外部符号

请添加图片描述


原因:PCRE默认为静态编译
解决方案:

  1. 打开文件misc.c
  2. #include <pcre.h>之前加上这个宏#define PCRE_STATIC

请添加图片描述


源码调试

  1. 在main函数中打断点(位置:swigmain.cxx
  2. 将子工程swig设置为启动项
  3. 右键swig子工程 > 属性 > 配置属性 > 常规 > 输出目录 > E:\cpp\swig_study\swig
    1. 这一步的目的是将生成的swig.exe放到swig目录下,让swig.exe能够搜索到Lib等其他资源
  4. 右键swig子工程 > 属性 > C/C++ > 预处理器 > 预处理定义 > 加上SWIG_DEBUG
  5. 右键swig子工程 > 属性 > 调试 > 命令参数 > 输入:-v -c++ -csharp E:\cpp\swig_study\swig\Examples\csharp\template\example.i
    1. -v是输出调试信息
    2. 还有相关的命令,可运行swig -help查看
  6. 调试运行即可

在SWIG中,将String等基础类型抽象成了void*,很不方便调试。我们可以在源码中找到一些方法,来查看void*中具体的值。


查看String的值

DOH/string.c中有一个函数

static void *String_data(DOH *so)
{String *s = (String *) ObjData(so);s->str[s->len] = 0;return (void *) s->str;
}

在调试中使用这个函数即可(char*)String_data(package_version)

请添加图片描述

这篇关于[SWIG] 源码编译与阅读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/705451

相关文章

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear