MacOSX + Boost_Python + PyFTGL: – Símbolo no encontrado, esperado en: espacio de nombres plano

Estoy tratando de instalar PyFTGL en MacOSX Yosemite.

La versión de python que estoy usando es 2.7 de macports. He instalado boost desde macports especificando + python27.

Para instalar PyFTGL construí desde la fuente y edité el archivo setup.py desde:

module_ftgl_libs = [ 'GLU', 'GL', 'freetype', 'z', 'ftgl', 'boost_python', ] module_ftgl = Extension( 'FTGL', module_ftgl_src, include_dirs=module_ftgl_include_dirs, libraries=module_ftgl_libs ) 

a:

  module_ftgl_libs = [ 'freetype', 'z', 'ftgl', 'boost_python', ] module_ftgl = Extension( 'FTGL', module_ftgl_src, include_dirs=module_ftgl_include_dirs, libraries=module_ftgl_libs, extra_link_args=['-framework', 'OpenGL', '-framework', 'GLUT'] ) 

Luego construyo el archivo setup.py y copio el archivo FTGL.so resultante en la misma carpeta que mi código de python test.py, que utiliza las funciones FTGL.

Mi problema es que cuando ejecuto mi código, aparece el siguiente error:

 Traceback (most recent call last): File "test.py", line 29, in  import FTGL ImportError: dlopen(/Users/james/Desktop/test/FTGL.so, 2): Symbol not found:__ZN5boost6python7objects15function_objectERKNS1_11py_functionERKNSt3__14pairIPNS0_6detail7keywordESA_EE Referenced from: /Users/james/Desktop/test/FTGL.so Expected in: flat namespace in /Users/james/Desktop/test/FTGL.so 

No sé mucho sobre la vinculación, los archivos setup.py y boost, y he pasado mucho tiempo investigando tanto en Google como en Stack Overflow, pero ahora no puedo resolver el problema.

Usando c++filt , el símbolo puede ser decodificado como:

 $ c++filt -n _ZN5boost6python7objects15function_objectERKNS1_11py_functionERKSt4pairIPKNS0_6detail7keywordES9_E boost::python::objects::function_object(boost::python::objects::py_function const&, std::pair const&) 

Como tengo el mismo problema, busqué símbolos similares en libboost_python.dylib:

 $ nm -gU ~/Downloads/boost_1_60_0/bin.v2/libs/python/build/darwin-4.2.1/debug/libboost_python.dylib | grep function_object 0000000000027cd0 T __ZN5boost6python7objects15function_objectERKNS1_11py_functionE 0000000000027c20 T __ZN5boost6python7objects15function_objectERKNS1_11py_functionERKNSt3__14pairIPKNS0_6detail7keywordESA_EE 

Uno de los cuales se decodifica como:

 boost::python::objects::function_object(boost::python::objects::py_function const&, std::__1::pair const&) 

La única diferencia es que el impulso dynamic lib utiliza std::__1::pair lugar de std::pair .

Como también se mencionó aquí: ¿Por qué no se puede chocar con libc ++ en el modo c ++ 0x vincular este ejemplo de boost :: program_options? , libc++ y libstdc++ no son compatibles. Una opción es recomstackr el impulso con libstdc++ :

 ./b2 cxxflags="-stdlib=libstdc++" linkflags="-stdlib=libstdc++" python 

Pude superar este error al desinstalar todas las bibliotecas boost y luego usar brew install boost155 --with-python --with-mpi --without-single y cambiar de homcrew gcc / g ++ – 5 a gcc / g ++ – 4.9

vaya a brew edit boost155 y reemplace el diseño de tagged al system si es posible