作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的标题 sample.h
中有这个:
#include <iostream>
#ifdef SWIG
int a = 0;
#endif
在我的 sample.i
中:
%module sample
%{
#include "sample.h"
%}
#include "sample.h"
但是,我看不出有和没有#ifdef SWIG 之间有什么区别...
能否请您告诉我在哪里以及如何找到差异,差异是什么?
非常感谢!
最佳答案
您的 .i 文件有错误。最后一行应该是 %include
而不是 #include
。通过此更改,构建包装器(我使用的是 Python)会产生:
sample_wrap.cxx
sample_wrap.cxx(3200) : error C2065: 'a' : undeclared identifier
sample_wrap.cxx(3211) : error C2065: 'a' : undeclared identifier
这是因为编译后的 SWIG 未在 #include
期间定义,并且 a
不存在于结果代码中。当 SWIG 处理 %include
时,SWIG 被定义并为 a
生成一个不存在的接口(interface)。
删除 #if
包装器会生成一个正确包装的全局变量:
>>> import sample
>>> sample.cvar.a
0
关于c++ - #ifdef SWIG : When does this conditional compilation is taken into consideration?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22119641/
我是一名优秀的程序员,十分优秀!