2016-03-11 4 views
9

मैं स्विंग के साथ test.cpp में फ़ंक्शन foo को लपेटने की कोशिश कर रहा हूं। मेरे पास एक शीर्षलेख foo.h है जिसमें फ़ंक्शन foo की घोषणा शामिल है। test.cpp एक बाहरी हैडर ex.h और साझा वस्तु फ़ाइल libex.so/usr/lib64SWIG + setup.py: ImportError: गतिशील मॉड्यूल init फ़ंक्शन (init_foo) को परिभाषित नहीं करता है

में स्थित मैं blog post from here पीछा किया पर निर्भर है।

मैं python setup.py build_ext --inplace के साथ मॉड्यूल बनाने में सक्षम हूं। हालांकि जब मैं इसे आयात करने का प्रयास करता हूं तो मुझे निम्न त्रुटि मिलती है और मुझे यकीन नहीं है कि मैं क्या खो रहा हूं क्योंकि इस त्रुटि के साथ अधिकांश अन्य प्रश्न setup.py फ़ाइल का उपयोग नहीं करते हैं। नीचे वर्तमान में मेरे पास एक उदाहरण है।

आयात करने _foo पर त्रुटि:

>>> import _foo 

ImportError: dynamic module does not define init function (init_foo) 

test.i

%module foo 


%{ 
#pragma warning(disable : 4996) 
#define SWIG_FILE_WITH_INIT 
#include "test.h" 
%} 

%include <std_vector.i> 
%include <std_string.i> 
%include "test.h" 

test.cpp

#include "ex.h" 

void foo(int i){ 
    return; 
}; 

test.h

#include "ex.h" 

void foo(int i); 

setup.py

try: 
    from setuptools.command.build_ext import build_ext 
    from setuptools import setup, Extension, Command 
except: 
    from distutils.command.build_ext import build_ext 
    from distutils import setup, Extension, Command 

foo_module = Extension('_foo', 
         sources=['foo.i' , 'foo.cpp'], 
         swig_opts=['-c++'], 
         library_dirs=['/usr/lib64'], 
         libraries=['ex'], 
         include_dirs = ['/usr/include'], 
         extra_compile_args = ['-DNDEBUG', '-DUNIX', '-D__UNIX', '-m64', '-fPIC', '-O2', '-w', '-fmessage-length=0']) 

setup(name='mymodule', 
     ext_modules=[foo_module], 
     py_modules=["foo"], 
    ) 
+0

आप इसे उत्पन्न फ़ाइल संकलन एक चादर फाइल उत्पन्न देखने और लिंक कर रहे हैं करने के लिए

Extension('_foo', 

से अपने setup.py में घोषणा का समायोजन मॉड्यूल में? कुछ 'swig -python -C++ -o foo_wrap.cpp foo.i', 'gcc ... foo_wrap.cpp ...', 'g ++ ... foo_wrap.o ... जैसा कि ब्लॉग में आउटपुट में है पोस्ट – Thomas

+0

@ थॉमस हां एक लंबा/समान आउटपुट है जो मैं एक पल में जो देख रहा हूं उसे पोस्ट करूंगा। – pyCthon

+0

@ थॉमस यहां आउटपुट है, http://pastebin.com/MSChdNMy – pyCthon

उत्तर

3

है लग रहा है वहाँ, foo और _foo के उपयोग में कुछ असंगति है की तरह के रूप में चादर फ़ाइल संकलित और में जुड़े हुए जेनरेट कर रहा है।

से test.i में मॉड्यूल का नाम बदलने का प्रयास करें
%module foo 

%module _foo 

करने के लिए या एक्सटेंशन

Extension('foo', 
संबंधित मुद्दे

 संबंधित मुद्दे