本文主要是介绍[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是免费的,也可用于商业用途。
- 下载地址:http://sourceforge.net/projects/pcre/
- 官网:http://www.pcre.org/
下载之后,用cmake编译、安装即可。
二、安装BISON
bison是一个GNU自由软件,用于自动生成语法分析器。根据自定义的语法规则,你可以分析大部分语言的语法,小到桌面计算器,大到复杂的编程语言
- 官方文档:http://www.gnu.org/software/bison/manual/bison.html
- 下载链接: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
- 解决方案一:重新开机
- 解决方案二:bison.exe 文件中似乎有一些错误。我用在这个 zip 文件中找到的那个替换了它。
- http://marin.jb.free.fr/bison/bison-2.4.1-modified.zip
- 资料来源:http : //marin.jb.free.fr/bison/
附:无法解析的外部符号
原因:PCRE默认为静态编译
解决方案:
- 打开文件misc.c
- 在
#include <pcre.h>
之前加上这个宏#define PCRE_STATIC
源码调试
- 在main函数中打断点(位置:
swigmain.cxx
) - 将子工程
swig
设置为启动项 - 右键
swig
子工程 > 属性 > 配置属性 > 常规 > 输出目录 >E:\cpp\swig_study\swig
- 这一步的目的是将生成的
swig.exe
放到swig目录下,让swig.exe能够搜索到Lib等其他资源
- 这一步的目的是将生成的
- 右键
swig
子工程 > 属性 > C/C++ > 预处理器 > 预处理定义 > 加上SWIG_DEBUG
- 右键
swig
子工程 > 属性 > 调试 > 命令参数 > 输入:-v -c++ -csharp E:\cpp\swig_study\swig\Examples\csharp\template\example.i
-v
是输出调试信息- 还有相关的命令,可运行
swig -help
查看
- 调试运行即可
在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] 源码编译与阅读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!