On Thursday 15 December 2011 19:06:31 anatoly techtonik wrote: > Can anybody help me? I am really stuck. > > I can't understand why C++ was chosen to write the tool like Shiboken. If > it was in Python - it was much more easier to troubleshoot the issues like > this one.
Historic reasons, besides the fact that the C++ parser we have was written in C++. I already tried to create bindings for ApiExtractor (where the C++ parser lives) using the current Shiboken and rewrite the generator in Python, but it's a lot of work and I had no free time to do that so I forgot this idea. As I said Shiboken was intended to be used to wrap C++ libraries, not C. It can be used to wrap C libraries but for sure there are better and simpler tools to do that. > > On Wed, Dec 14, 2011 at 11:38 PM, Hugo Parente Lima < > > > > [email protected]> wrote: > >> > > You also need to care care of putting all your includes inside a > >> > >> "extern > >> > >> > > C", > >> > > because shiboken generates C++ code. > >> > > >> > Could you, please, expand this a bit? Do I need to do this in avbin.h > >> > >> file, > >> > >> > or in generated .cpp/.h files? > >> > >> When linking C code using a C++ compiler you must tell the C++ compiler > >> that > >> the function is a C function, not a C++ function, you do this putting > >> the function declaration inside a block like: > >> > >> extern "C" { > >> } > >> > >> Some C libraries already do that in their headers, but if your library > >> doesn't > >> do that you need to find a way to have all your C includes inside a > >> extern "C" > >> block. > > > > I've wrapped code inside avbin.h into extern "C" block following the > > excellent explanation from > > http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html but it still > > doesn't help. > > > > The problem is that Shiboken was meant to be used to wrap C++ code, not > > C, > > > >> so > >> the code generator doesn't write the "extern C" before including the > >> library > >> headers and you need to find a way to do that. Thinking a bit I don't > >> know if > >> there's a clean way to do that with the current version of Shiboken. > > > > Do you mean that if I execute `shiboken lib/AVbin/include/avbin.h > > typesystem.xml` shiboken can not detect if avbin.h is C or C++ header? > > > > > > > For example, I want to create binding for avbin_get_version() > >> > >> function > >> > >> > > > available from > >> > > > https://github.com/AVbin/AVbin/blob/master/include/avbin.h > >> > > > > >> > > > I do: > >> > > > $ shiboken lib/AVbin/include/avbin.h typesystem.xml > >> > > > > >> > > > Where typesystem.xml is the following: > >> > > > > >> > > > <?xml version="1.0"?> > >> > > > > >> > > > <!-- the name of the module as it will be imported from Python--> > >> > > > <typesystem package='AVbin'> > >> > > > > >> > > > <function signature='int avbin_get_version()' rename='version'/> > >> > > > > >> > > > </typesystem> > >> > > > > >> > > > > >> > > > First of all it always complains about "No C++ classes found!" > >> > > > >> > > You can ignore this message. > >> > > > >> > > > Then I see the message: > >> > > > Global function 'int avbin_get_version()' is specified in > >> > >> typesystem, > >> > >> > > > but not defined. This could potentially lead to compilation > >> > > > errors. > >> > > > > >> > > > If I modify the <function> with signature='avbin_get_version()' I > >> > >> get > >> > >> > > > another error: > >> > > > skipping function '::avbin_get_version', unmatched return type > >> > > > 'int' > >> > > > >> > > Probably this function wasn't found in your global header, the > >> > > header file read by shiboken to find what classes/function can be > >> > > bound, look at the log > >> > > files generated by the generator. > >> > > >> > They are empty. 1032 bytes each. > >> > Console output: http://pastebin.com/fU7rzmXi > >> > Generated files: > >> > - out/AVbin/avbin_module_wrapper.cpp - http://pastebin.com/GUkTiksN > >> > - out/AVbin/avbin_python.h - http://pastebin.com/KmGDW8xi > >> > >> No, I meant the log files created by the generator, something like > >> mjb_rejected_functions.log, the log must explain why the functions were > >> rejected. > > > > All logs look the same: http://paste.kde.org/159104/ > > I've specified --debug-level=full but it added only one line to console > > output that doesn't explain anything: > > DEBUG :: Parsed: 'typesystem.xml', 2 new entries > > > > > I've uploaded the project to: > >> > https://bitbucket.org/techtonik/shiboken-avbin -- Hugo Parente Lima INdT - Instituto Nokia de Tecnologia
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ PySide mailing list [email protected] http://lists.pyside.org/listinfo/pyside
