首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >swig:没有用-c++设置__cplusplus?

swig:没有用-c++设置__cplusplus?
EN

Stack Overflow用户
提问于 2017-03-02 02:45:31
回答 1查看 306关注 0票数 0

我正在尝试为一个静态库(*.a)创建一个带有swig的包装器,以便与Golang一起使用。

我使用了一个mylib.swigcxx文件,该文件使用以下选项触发Golang调用swig:

代码语言:javascript
复制
swig -go -cgo -intgosize 64 -module mylib \
-o $WORK/mylib/_obj/mylib_wrap.cxx \
-outdir $WORK/mylib/_obj/ \
-I/mylib/lib \
-c++ mylib.swigcxx

mylib.swigcxx如下所示:

代码语言:javascript
复制
%module mylib
%{
    // (snip)
    #include "basic/internal/config.h"
    #include "basic/internal/config_autogen.h"
    // (snip)
%}

%include <typemaps.i>
%include "std_string.i"
%include "std_vector.i"

// This will create 2 wrapped types in Go called
// "StringVector" and "ByteVector" for their respective
// types.
namespace std {
   %template(StringVector) vector<string>;
   %template(ByteVector) vector<char>;
}

// ...
%include "basic/internal/config.h"
%include "basic/internal/config_autogen.h"
// ...

我试图包装的大型库有一个头文件,其中包含以下代码:

代码语言:javascript
复制
   70 // C++11 standard
   71 
   72 #if __cplusplus < 201103
   73 
   74 #if defined(_MSC_VER)
   75 #if _MSC_VER < 1700
   76 #error "Compiling OGDF requires Visual C++ 11 (Visual Studio 2012) or higher!"
   77 #endif
   78 
   79 #elif defined(__GNUC__)
   80 #ifndef __GXX_EXPERIMENTAL_CXX0X__
   81 #error "No C++11 support activated for g++ (compile with -std=c++0x or -std=c++11)!"
   82 #endif
   83 
   84 #else
   85 #error "Compiling OGDF requires a C++11 compliant compiler!"
   86 #endif
   87 
   88 #endif
   89 

正如您所看到的,它正在检查__cplusplus是否设置正确,如果设置不正确,则显示错误。

我在swig执行过程中得到的错误是:

代码语言:javascript
复制
/mylib/lib -c++ mylib.swigcxx
/mylib/lib/basic/internal/config.h:85: Error: CPP #error ""Compiling OGDF requires a C++11 compliant compiler!"". Use the -cpperraswarn option to continue swig processing.
/mylib/lib/basic/internal/config.h:254: Error: CPP #error ""OGDF is compiled without LP solver. Check your build configuration."". Use the -cpperraswarn option to continue swig processing.
/mylib/lib/basic/internal/config.h:299: Error: CPP #error ""OGDF is compiled without memory manager. Check your build configuration."". Use the -cpperraswarn option to continue swig processing.

如您所见,对于__cplusplus < 201103else子句,它在第85行失败。

根据the SWIG 3.0 docs, this should be set with the -c++ flag的说法

代码语言:javascript
复制
__cplusplus                     Defined when -c++ option used

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2017-03-02 06:30:51

我怀疑__cplusplus是定义的,但它的值不到201103。

如果SWIG确实支持您的库所需的C++11特性,那么在您的.i文件中添加以下代码应该可以解决这个问题。

代码语言:javascript
复制
#undef __cplusplus
#define __cplusplus 201103
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42539561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档