के साथ हैलो वर्ल्ड तो मैं बूस्ट पायथन का उपयोग करके पाइथन 3.2 और सी ++ इंटरफेस करने की कोशिश कर रहा हूं, और कई सारे मुद्दों पर आ गया हूं। आखिरकार मैंने इसे 2.7 पुस्तकालयों का उपयोग करके संकलित करने के लिए प्राप्त किया है और यह काम करता है, लेकिन मुझे इसे पायथन 3.2 के साथ काम नहीं करना प्रतीत होता है।बूस्ट पायथन और पायथन 3.2
यहाँ C++ कोड
#include <iostream>
using namespace std;
void say_hello(const char* name) {
cout << "Hello " << name << "!\n";
}
int main(){return 0;}
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
using namespace boost::python;
BOOST_PYTHON_MODULE(hello)
{
def("say_hello", say_hello);
}
अगर मैं 2.7 पुस्तकालयों यह सिर्फ ठीक काम करता है का उपयोग कर इसे संकलित, लेकिन जब मैं 3.2 पुस्तकालयों का उपयोग मैं libboost_python.so
अन्यथा से अपरिभाषित संदर्भ की टन मिलता है मैं यह काम करने के लिए अजगर का एक छोटा सा लिखा है:
from distutils.core import setup
from distutils.extension import Extension
setup(name="PackageName",
ext_modules=[
Extension("hello", ["testBoost.cpp"],
libraries = ["boost_python"])
])
और इस एक तो अजगर 3.2 या 2.7 निर्माण का उपयोग कर पैदा करेगा, लेकिन जब मैं अजगर 3 interpr खोलने eter और आयात करने का प्रयास करें ताकि यह मुझे libboost_python.so से फिर से त्रुटि अपरिभाषित प्रतीक PyClass_Type दे। कोई विचार? पाइथन 3.x के साथ संगत बूथ पायथन है?
जानकारी उपयोगी है, तो यहां मेरी प्रयास किया संकलन 3.2 का उपयोग कर रहा है:
$ g++ testBoost.cpp -I/usr/include/python3.2 -I/usr/local/include/boost/python -lboost_python -lpython3.2mu
/tmp/ccdmU1Yu.o: In function `PyInit_hello':
testBoost.cpp:(.text+0xc2): undefined reference to `boost::python::detail::init_module(PyModuleDef&, void (*)())'
/usr/local/lib/libboost_python.so: undefined reference to `PyString_Size'
/usr/local/lib/libboost_python.so: undefined reference to `PyFile_FromString'
/usr/local/lib/libboost_python.so: undefined reference to `PyString_Type'
/usr/local/lib/libboost_python.so: undefined reference to `PyInt_Type'
/usr/local/lib/libboost_python.so: undefined reference to `PyString_FromString'
/usr/local/lib/libboost_python.so: undefined reference to `PyString_FromStringAndSize'
/usr/local/lib/libboost_python.so: undefined reference to `Py_InitModule4_64'
/usr/local/lib/libboost_python.so: undefined reference to `PyString_FromFormat'
/usr/local/lib/libboost_python.so: undefined reference to `PyNumber_Divide'
/usr/local/lib/libboost_python.so: undefined reference to `PyNumber_InPlaceDivide'
/usr/local/lib/libboost_python.so: undefined reference to `PyInt_AsLong'
/usr/local/lib/libboost_python.so: undefined reference to `PyString_InternFromString'
/usr/local/lib/libboost_python.so: undefined reference to `PyClass_Type'
/usr/local/lib/libboost_python.so: undefined reference to `PyString_AsString'
/usr/local/lib/libboost_python.so: undefined reference to `PyInt_FromLong'
/usr/local/lib/libboost_python.so: undefined reference to `PyFile_AsFile'
collect2: ld returned 1 exit status
और अजगर 3 दुभाषिया से त्रुटि
File "<stdin>", line 1, in <module>
ImportError: /usr/local/lib/libboost_python.so.1.47.0: undefined symbol: PyClass_Type
किसी भी मदद के लिए धन्यवाद है!
यदि आप सक्षम हैं, तो आप Boost.Python की बजाय SWIG को देखने पर विचार करना चाहेंगे।इसके लिए बहुत कम बॉयलरप्लेट कोड की आवश्यकता है और मुझे इसे आसानी से पहले Python3 के साथ काम करने के लिए मिला है। – Sean
@ सेन मुझे यकीन नहीं है कि आप किस बॉयलरप्लेट कोड के बारे में बात कर रहे हैं; मेरा बूस्ट/पायथन अतिरिक्त कोड की केवल 5 लाइनों के साथ तैराकी से काम करता है। – steventrouble