Я использую Swig 3.0.8 под Ubuntu 16.04 (g ++ 5.4), и следующий минимальный пример дает сбой:
TestStrVe c .h
#include <iostream>
void display_str(std::vector<std::string> vec)
{
for(auto str: vec)
std::cout << str << std::endl;
}
teststrve c. я
%module rteststrvec
%include <std_string.i>
%include <std_vector.i>
%template(VectorString) std::vector<std::string>;
%include TestStrVec.h
%{
#include "TestStrVec.h"
%}
я глотаю / компилирую вот так (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
Тот же пример замена std :: string на double везде работает отлично. Не могли бы вы помочь решить проблему?