2017-05-27 100 views
0

我導入Ø很少的外部庫與用Cython:與用Cython外部庫,導致導入錯誤

cdef extern from "zmq.h" nogil: 
int zmq_msg_init (zmq_msg_t *msg) 
int zmq_msg_init_size (zmq_msg_t *msg, size_t size) 
int zmq_bind (zmq_msg_t *msg, void *data, 
    size_t size, zmq_free_fn *ffn, void *hint) 
... 

並得到以下錯誤:

g++ -bundle -undefined dynamic_lookup -L/Users/taghawi/anaconda/envs/py3/lib -L/Users/taghawi/anaconda/envs/py3/lib -arch x86_64 build/temp.macosx-10.7-x86_64-3.6/processorgroup.o -L/Users/taghawi/anaconda/envs/py3/lib -lstdc++ -o /Users/taghawi/Dropbox/workspace/ABCEabsinth/processorgroup.cpython-36m-darwin.so 
Traceback (most recent call last): 
    File "start.py", line 1, in <module> 
    from processorgroup import ProcessorGroup 
ImportError: 
dlopen(/Users/taghawi/Dropbox/workspace/ABCEabsinth/processorgroup.cpython-36m-darwin.so, 2): Symbol not found: _zmq_bind 
    Referenced from: /Users/taghawi/Dropbox/workspace/ABCEabsinth/processorgroup.cpython-36m-darwin.so 
    Expected in: flat namespace 
in /Users/taghawi/Dropbox/workspace/ABCEabsinth/processorgroup.cpython-36m-darwin.so 
+0

請不要根據stackoverflow規則回答你自己的問題是完全合法的。所以請不要在閱讀stackoverflow規則之前投票給我! –

回答

1

的問題是,如果一個使用外部庫「zmq.h」在這種情況下,需要在編譯中指定:

setup(
    name = 'cagent', 
    ext_modules=cythonize([ 
Extension('processorgroup', ['processorgroup.pyx'], 
      language="c++", 
      libraries=["stdc++", "zmq"], 
      include_dirs=[numpy.get_include()], 
      ), 
      ]), 
cmdclass = {'build_ext': build_ext} 
) 

通知「裏的「ZMQ」 braries = [「stdC++」,「zmq」],'

+0

請不要根據stackoverflow規則回答你自己的問題是完全合法的。 –