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 目前修复了这个问题!