Swig std::vector<std::string> C++ 到 R 失败
Swig std::vector<std::string> C++ to R fails
我在 Ubuntu 16.04 (g++ 5.4) 下使用 Swig 3.0.8,下面的最小示例失败了:
TestStrVec.h
#include <iostream>
void display_str(std::vector<std::string> vec)
{
for(auto str: vec)
std::cout << str << std::endl;
}
teststrvec.i
%module rteststrvec
%include <std_string.i>
%include <std_vector.i>
%template(VectorString) std::vector<std::string>;
%include TestStrVec.h
%{
#include "TestStrVec.h"
%}
我swig/compile喜欢(csh)
swig -c++ -r -o teststrvec_wrap.cpp teststrvec.i
g++ -std=c++11 -fpic -shared teststrvec_wrap.cpp -I/usr/share/R/include -L. -o rteststrvec.so
setenv LD_LIBRARY_PATH .
然后我在R中测试
source("rteststrvec.R")
dyn.load("rteststrvec.so")
display_str(c("a", "b", "c")) # ERROR: SEGV in swig::asptr
用 double 替换 std::string 的同一个示例在任何地方都能完美运行。
你能帮忙解决这个问题吗?
关于这个问题的很好的更新:Swig 4.0.1 目前修复了这个问题!
我在 Ubuntu 16.04 (g++ 5.4) 下使用 Swig 3.0.8,下面的最小示例失败了:
TestStrVec.h
#include <iostream>
void display_str(std::vector<std::string> vec)
{
for(auto str: vec)
std::cout << str << std::endl;
}
teststrvec.i
%module rteststrvec
%include <std_string.i>
%include <std_vector.i>
%template(VectorString) std::vector<std::string>;
%include TestStrVec.h
%{
#include "TestStrVec.h"
%}
我swig/compile喜欢(csh)
swig -c++ -r -o teststrvec_wrap.cpp teststrvec.i
g++ -std=c++11 -fpic -shared teststrvec_wrap.cpp -I/usr/share/R/include -L. -o rteststrvec.so
setenv LD_LIBRARY_PATH .
然后我在R中测试
source("rteststrvec.R")
dyn.load("rteststrvec.so")
display_str(c("a", "b", "c")) # ERROR: SEGV in swig::asptr
用 double 替换 std::string 的同一个示例在任何地方都能完美运行。 你能帮忙解决这个问题吗?
关于这个问题的很好的更新:Swig 4.0.1 目前修复了这个问题!