[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

相关文章

java 恺撒加密/解密实现原理(附带源码)

《java恺撒加密/解密实现原理(附带源码)》本文介绍Java实现恺撒加密与解密,通过固定位移量对字母进行循环替换,保留大小写及非字母字符,由于其实现简单、易于理解,恺撒加密常被用作学习加密算法的入... 目录Java 恺撒加密/解密实现1. 项目背景与介绍2. 相关知识2.1 恺撒加密算法原理2.2 Ja

Nginx屏蔽服务器名称与版本信息方式(源码级修改)

《Nginx屏蔽服务器名称与版本信息方式(源码级修改)》本文详解如何通过源码修改Nginx1.25.4,移除Server响应头中的服务类型和版本信息,以增强安全性,需重新配置、编译、安装,升级时需重复... 目录一、背景与目的二、适用版本三、操作步骤修改源码文件四、后续操作提示五、注意事项六、总结一、背景与

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

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