[vtk-developers] Undefined symbols after wrapping my code to Python

Ronald Römer rroemer at gmail.com
Tue Oct 10 00:45:27 EDT 2017


It works also for me. Thanks for your help. Could you please change the
documentation so that others don't need to search for a solution.


On 10.10.2017 06:27, David Gobbi wrote:
> Seems fishy to me, but in any case, I downloaded your vtkbool package
> and was able to build & use it with the following modifications to the
> CMakeLists.txt:
>
> 1) added vtkWrappingPythonCore to the COMPONENTS:
>
>     find_package(VTK REQUIRED COMPONENTS
>         vtkFiltersSources vtkIOLegacy vtkFiltersExtraction
> vtkFiltersGeometry vtkFiltersModeling
>         vtkRenderingFreeType vtkWrappingPythonCore NO_MODULE)
>
> 2) added vtkWrappingPythonCore and vtkCommonExecutionModelPythonD to
> target_link_libraries:
>
>     target_link_libraries(${PROJECT_NAME}PythonD ${PROJECT_NAME}
>         vtkWrappingPythonCore vtkCommonExecutionModelPythonD)
>
> 3) fixed the prefix and suffix for the Python module:
>
>     set_target_properties(${PROJECT_NAME}Python PROPERTIES PREFIX "")
>     if(WIN32)
>         set_target_properties(${PROJECT_NAME}Python PROPERTIES SUFFIX
> ".pyd")
>     endif()
>
> After that, I built the project and loaded the module into Python:
>
> vtkpython 
> vtk version 7.1.0
> Python 2.7.10 (default, Oct 23 2015, 19:19:21) 
> [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
> Type "help", "copyright", "credits" or "license" for more information.
> >>> from vtkboolPython import vtkPolyDataBooleanFilter
> >>> pdbf = vtkPolyDataBooleanFilter()
> >>> 
>
>
> In summary, I'm not sure why you were still seeing the missing symbols
> after you linked to the library.
>
>  - David
>
>
> On Mon, Oct 9, 2017 at 9:49 PM, Ronald Römer <rroemer at gmail.com
> <mailto:rroemer at gmail.com>> wrote:
>
>     Yes, that's right.
>
>     On 10.10.2017 05:45, David Gobbi wrote:
>>     I'm just trying to make sure that we're communicating the correct
>>     information back and forth here...
>>
>>     Are you saying that after adding vtkWrappingPythonCore to
>>     target_link_libraries(), you were able to successfully compile
>>     your project, but when trying to import the module you saw
>>     unresolved symbol errors for PyVTKClass_New and other "PyVTK_*"
>>     methods?
>>
>>     The vtkWrappingPythonCore library existed in VTK 5, as well, but
>>     it was called vtkPythonCore back then.
>>
>>      - David
>>
>>
>>     On Mon, Oct 9, 2017 at 9:28 PM, Ronald Römer <rroemer at gmail.com
>>     <mailto:rroemer at gmail.com>> wrote:
>>
>>         There are still undefined symbols:
>>
>>         00000000002074e0 d DW.ref.__gxx_personality_v0
>>         U PyBool_FromLong
>>         U PyDict_SetItemString
>>         U PyErr_Occurred
>>         U PyInt_FromLong
>>         U PyModule_GetDict
>>         U PyString_FromString
>>         00000000000040f9 T PyVTKAddFile_vtkPolyDataBooleanFilter
>>         U PyVTKClass_New
>>         U PyVTKClass_Type
>>         U PyVTKClass_vtkPolyDataAlgorithmNew
>>         0000000000004087 T PyVTKClass_vtkPolyDataBooleanFilterNew
>>         U PyVTKObject_GetObject
>>         U PyVTKObject_SetFlag
>>         U PyVTKObject_Type
>>         U Py_FatalError
>>         U Py_InitModule4_64
>>
>>         I think it is a problem with the modularized VTK, that is
>>         present since version 6.
>>
>>         libvtkWrappingPython27Core-6.3.so
>>         <http://libvtkWrappingPython27Core-6.3.so> exists in the lib
>>         directory.
>>
>>
>>
>>
>>         On 10.10.2017 05:18, David Gobbi wrote:
>>>         Did it fail because it didn't find the library?  Or did it
>>>         fail because it still had unresolved symbols?
>>>
>>>         On Mon, Oct 9, 2017 at 9:14 PM, Ronald Römer
>>>         <rroemer at gmail.com <mailto:rroemer at gmail.com>> wrote:
>>>
>>>             I already tried this without any success. I have no idea
>>>             what is wrong with it. You can try to modify my code to
>>>             find out the correct necessary changes.
>>>
>>>             Best regards
>>>             Ronald
>>>
>>>
>>>
>>>             On 10.10.2017 04:59, David Gobbi wrote:
>>>>             Hi Ronald,
>>>>
>>>>             Use the following:
>>>>
>>>>             target_link_libraries(${PROJECT_NAME}PythonD
>>>>             ${PROJECT_NAME} vtkWrappingPythonCore)
>>>>
>>>>             You might also have to add vtkWrappingPythonCore to the
>>>>             components for find_package(VTK).
>>>>
>>>>              - David
>>>>
>>>>
>>>>             On Mon, Oct 9, 2017 at 8:34 PM, Ronald Römer
>>>>             <rroemer at gmail.com <mailto:rroemer at gmail.com>> wrote:
>>>>
>>>>                 Hello,
>>>>
>>>>                 I'm trying to fix a problem with the python wrapper
>>>>                 of my library. In my CMakeLists.txt there are the
>>>>                 following lines:
>>>>
>>>>                 find_package(VTK REQUIRED COMPONENTS
>>>>                 vtkFiltersSources vtkIOLegacy vtkFiltersExtraction
>>>>                 vtkFiltersGeometry vtkFiltersModeling
>>>>                 vtkRenderingFreeType NO_MODULE)
>>>>
>>>>                 include(${VTK_USE_FILE})
>>>>
>>>>                 if(VTK_WRAP_PYTHON)
>>>>                     find_package(PythonLibs 2.7 REQUIRED)
>>>>
>>>>                     if(PYTHONLIBS_FOUND)
>>>>
>>>>                         include_directories(${PYTHON_INCLUDE_DIRS}
>>>>                 ${PROJECT_SOURCE_DIR})
>>>>
>>>>                         include(vtkWrapPython)
>>>>
>>>>                         vtk_wrap_python3(${PROJECT_NAME}Python
>>>>                 ${PROJECT_NAME}Python_srcs
>>>>                 vtkPolyDataBooleanFilter.cxx)
>>>>
>>>>                         add_library(${PROJECT_NAME}PythonD
>>>>                 ${${PROJECT_NAME}Python_srcs})
>>>>                        
>>>>                 target_link_libraries(${PROJECT_NAME}PythonD
>>>>                 ${PROJECT_NAME})
>>>>
>>>>                         add_library(${PROJECT_NAME}Python MODULE
>>>>                 ${PROJECT_NAME}PythonInit.cxx)
>>>>                         target_link_libraries(${PROJECT_NAME}Python
>>>>                 ${PROJECT_NAME}PythonD)
>>>>
>>>>                     endif()
>>>>                 endif()
>>>>
>>>>                 When I try to import the module into a python
>>>>                 script, I get an import error about undefined
>>>>                 symbols like PyVTKObject_Type. After a little
>>>>                 research with nm I found out that the shared object
>>>>                 is not linked to libvtkWrappingPython27Core. Here
>>>>                 are the first lines of it:
>>>>
>>>>                 U PyBool_FromLong
>>>>                 U PyDict_SetItemString
>>>>                 U PyErr_Occurred
>>>>                 U PyInt_FromLong
>>>>                 U PyModule_GetDict
>>>>                 U PyString_FromString
>>>>                 0000000000003020 T
>>>>                 PyVTKAddFile_vtkPolyDataBooleanFilter
>>>>                 U PyVTKClass_New
>>>>                 U PyVTKClass_Type
>>>>                 U PyVTKClass_vtkPolyDataAlgorithmNew
>>>>
>>>>                 How to fix this? There is no documentation about
>>>>                 the the python wrapper, except
>>>>                 https://www.vtk.org/Wiki/VTK/Python_Wrapping_FAQ
>>>>                 <https://www.vtk.org/Wiki/VTK/Python_Wrapping_FAQ>.
>>>>
>>>>                 I'm actually using VTK 6.3 and my library can be
>>>>                 found on https://github.com/zippy84/vtkbool
>>>>                 <https://github.com/zippy84/vtkbool>.
>>>>
>>>>                 Best regards
>>>>                 Ronald
>>>>
>>>>
>>>
>>>
>>
>>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtk-developers/attachments/20171010/ee1da159/attachment-0001.html>


More information about the vtk-developers mailing list