[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

相关文章

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很