Я пытался использовать ctypes для знаменитой библиотеки re2. Но я получаю ошибку сегментации.Python ctypes, дающий ошибку сегментации
Вот код
tryone.cpp
#include <re2/re2.h>
#include <iostream>
#include <tuple>
using namespace re2;
RE2 re("([^ @]+)@([^ @]+)");
std::pair<string, string> match(string rawtext){
string uname;
string domain;
RE2::PartialMatch(rawtext, re, &uname, &domain);
return std::make_pair(uname, domain);
}
bool isit(string rawtext){
return RE2::PartialMatch(rawtext, re);
}
extern "C" {
bool there(string rawtext){ return isit(rawtext); }
}
int main() {
if(isit("[email protected]")){
printf("PASS\n");
}
}
Затем я составил с г ++
g++ -I/usr/local/include -L/usr/local/lib -c -fPIC -std=c++11 tryone.cpp -lre2 -pthread -o tryone.o
g++ -shared -Wl,-soname,libmatch.so -L/usr/local/lib -lre2 -o libmatch.so tryone.o /usr/local/lib/libre2.so.0
Вот мой питон функция упаковщик
from ctypes import cdll, c_char_p, c_bool
lib = cdll.LoadLibrary('./libmatch.so')
lib.there.argtypes = [c_char_p]
lib.there.restype = c_bool
print lib.there("[email protected]")
Но когда я бегу питон-треска e это дает мне ошибку сегментации python wrapper.py
Спасибо. Я новичок в C++. Ваш совет работал – digitaltracer