एम्बेड करते समय विलंब लोड पायथन डीएलएल मैं एक सी ++ एप्लिकेशन बना रहा हूं जो पायथन + numpy को कॉल करेगा और मैं पायथन डीएलएल को हटाना चाहता हूं। मैं विंडोज़ पर विजुअल स्टूडियो 2015 का उपयोग 64 बिट पायथन 3.6 के साथ करता हूं। जब तक मैं numpy का उपयोग नहीं कर रहा हूं, DELELOAD ठीक काम करता है। जैसे ही मैं import_array()
पर कॉल करता हूं, अब मैं DELAYLOAD विकल्प के साथ निर्माण नहीं कर सकता। लिंकर त्रुटिपाइथन + numpy
LNK1194 डेटा प्रतीक '__imp_PyExc_ImportError' के आयात के कारण 'python36.dll' देरी-लोड नहीं कर सकता; /DELAYLOAD:python36.dll के बिना लिंक।
// Initialize python Py_Initialize(); // If I remove this line, I am able to build with DELAYLOAD import_array();
वहाँ जब numpy का उपयोग कर देरी लोड संभव बनाने के लिए कोई तरीका है:
यहाँ मेरी कोड है?
वैकल्पिक प्रश्न: क्या import_array() को कॉल किए बिना डेटा को numpy.recarray बनाना और भरना संभव है?
संपादित करें: मैंने import_array() से छुटकारा पाने का निर्णय लिया है।
if (!Py_IsInitialized())
{
// Initialize Python
Py_Initialize();
// Initialize threads
PyEval_InitThreads();
// Needed for datetime
PyDateTime_IMPORT;
// Needed to avoid use of Py_None, Py_True, and Py_False;
// which cause inability to use DELAYLOAD
HMODULE pythonDll = GetModuleHandle(L"python36.dll");
if (pythonDll == nullptr)
{
throw gcnew NotSupportedException(L"GS_ERR_CannotInitialize");
}
PythonHelper::_pyNone = (PyObject*)GetProcAddress(pythonDll, "_Py_NoneStruct");
PythonHelper::_pyTrue = (PyObject*)GetProcAddress(pythonDll, "_Py_TrueStruct");
PythonHelper::_pyFalse = (PyObject*)GetProcAddress(pythonDll, "_Py_FalseStruct");
}
क्या आपने बिल्ड रिलीज/डीबग के दो प्रकारों को आजमाया है? कभी-कभी यह मदद करता है। – fghj
दुर्भाग्यवश, मुझे नहीं मिला और डिबग का निर्माण खराब हो गया, इसलिए केवल रिलीज LIB/DLL –
का उपयोग करके आप अपने सी ++ ऐप में numpy का संदर्भ कैसे दे रहे हैं? क्या आपने इसे नमस्ते निर्देशों के अनुसार स्रोत से बनाया था? – denfromufa