如何让SWIG识别来自其他文件的DECLSPEC预处理宏?
解决方案
方法1:在SWIG接口中提前解析公共头文件
修改example3.swg,在引入目标头文件前先让SWIG处理types.h,这样它就能识别FOO_DECLSPEC是预处理宏而非类名:
%module example3 %{ #define SWIG_FILE_WITH_INIT #include "example3.h" %} // 先解析公共头文件,让SWIG获取宏定义 %include "types.h" %include "example3.h"
方法2:命令行显式定义宏
如果不想改动接口文件,在WSL Ubuntu环境下调用SWIG时,直接通过-D参数把FOO_DECLSPEC定义为空:
swig -c++ -python -DFOO_DECLSPEC= example3.swg
这种方式简单直接,但跨平台时需要根据系统调整参数,灵活性稍差。
方法3:手动在接口中声明宏逻辑
用SWIG的%define指令在接口文件中复刻types.h的宏定义,无需引入原头文件:
%module example3 %{ #define SWIG_FILE_WITH_INIT #include "example3.h" %} // 模拟types.h中的宏逻辑 %ifdef WIN32 %ifdef FOO_EXPORT %define FOO_DECLSPEC __declspec(dllexport) %else %define FOO_DECLSPEC __declspec(dllimport) %endif %else %define FOO_DECLSPEC %endif %include "example3.h"
内容的提问来源于stack exchange,提问作者Mike Finch
相关产品推荐
相关产品推荐

