[Ctk-developers] Linking a shared library within a plugin

Sascha Zelzer s.zelzer at dkfz-heidelberg.de
Mon Aug 26 09:54:43 EDT 2013


Hi Florian,

this all sound really strange...

as you have noted already yourself, plug-ins are also just shared 
libraries, which are loaded dynamically at runtime. If I understood you 
right, in the case of linking the proprietary tracker library to the 
plug-in, the plug-in starts successfully but the tracker library reports 
a runtime error. Is that correct?

The only difference of which I can think of (compared to the working 
cases you mentioned), is that the plug-in is loaded via "dlopen" (on 
POSIX systems) using the QLibrary class. Depending on the Plugin 
Framework options

http://www.commontk.org/docs/html/structctkPluginConstants.html#a29af0cac606ca29ea8d66d342d05060e

different load hints are passed to QLibrary 
(http://qt-project.org/doc/qt-4.8/qlibrary.html#loadHints-prop). These 
load hints might affect symbol resolutions of subsequently loaded 
libraries, like your tracker library.

But if all this really relates to your actual problem is not clear to 
me, sorry.

Best,

Sascha


On 08/26/2013 02:37 PM, Florian Ganglberger wrote:
> Hi Jc,
> we've built a new shared library which calls our 
> shared-tracker-library. It works perfectly outside of our plugin and 
> the tracker can connect. As soon as we link the new shared library 
> into the plugin, we have our connection problem again. It calls the 
> function, produces all the output, but can't connect. So we can say 
> that the_shared tracker library works for:_
> *- a normal example program*:   example program --> shared tracker library
> *- the main method of our ctk app:*   ctk app --> shared tracker library
> *- called from a "normal" shared library: * example program --> 
> "normal" shared library  --> shared tracker library
>
> _and not for:_
> *- the plugin* (which is a shared library): ctk plugin --> shared 
> tracker library
> *- a call from a shared library which is called by the plugin*:  ctk 
> plugin --> "normal" shared library  --> shared tracker library
>
> Actually we have no idea, why it doesn't work....
>
> Thanks for your help,
> Florian
>
>
>
> 2013/8/26 Florian Ganglberger <Florian.Ganglberger at student.i-med.ac.at 
> <mailto:Florian.Ganglberger at student.i-med.ac.at>>
>
>     Hi Jc,
>     we can't really use a debugger, since we don't have the code for
>     the shared library, only the header files. The methods of the
>     shared library is definitely called, because we get an error
>     message that a connection to the tracker can't be established. Can
>     it be a problem, that the plugins are also shared libraries? We'll
>     write a shared library that calls the tracker today, so we can see
>     if the problem depends on calling the tracker-library from a
>     shared library or if it is ctk specific.
>
>     Additional information: As far as we know, the tracker library was
>     written in C (and not in C++)
>
>     Thanks for your help,
>     Florian
>
>
>     2013/8/24 Jean-Christophe Fillion-Robin
>     <jchris.fillionr at kitware.com <mailto:jchris.fillionr at kitware.com>>
>
>         Hi Florian,
>         If it build without problem, did you try using a debugger to
>         try to understand what s wrong?
>         Jc
>
>         --
>         Sent from my mobile device
>
>         On Aug 23, 2013 12:00 PM, "Florian Ganglberger"
>         <Florian.Ganglberger at student.i-med.ac.at
>         <mailto:Florian.Ganglberger at student.i-med.ac.at>> wrote:
>
>             Hi,
>             we are trying to link a shared library to connect to
>             tracker from a plugin. We know, that the code that calls
>             the .so library works in a test application and also in
>             the main method of our CTK application. After we have
>             added our code to the plugin and linked it to the .so
>             library, we can link and compile the code without errors,
>             but we don't get a connection to the tracker.
>             The cmakelists code to link the .so file in our test
>             application is
>             TARGET_LINK_LIBRARIES(optoExtern ${OPTOTRAK_LIBRARY})
>             (${OPTOTRAK_LIBRARY} is the library path, optoExtern the
>             project name)
>
>             The cmakelists code to link the .so file in our plugin:
>             ctkMacroBuildPlugin(
>               NAME ${PROJECT_NAME}
>               EXPORT_DIRECTIVE ${PLUGIN_export_directive}
>               SRCS ${PLUGIN_SRCS}
>               MOC_SRCS ${PLUGIN_MOC_SRCS}
>               UI_FORMS ${PLUGIN_UI_FORMS}
>               INCLUDE_DIRECTORIES ${Plugin_SOURCE_DIR}
>               RESOURCES ${PLUGIN_resources}
>               TARGET_LIBRARIES ${PLUGIN_target_libraries}
>             ${OPTOTRAK_LIBRARY}
>             )
>
>             Has anyone an idea how to link external shared libraries
>             within a plugin properly?
>
>             Best regards,
>             Florian Ganglberger
>
>             _______________________________________________
>             Ctk-developers mailing list
>             Ctk-developers at commontk.org
>             <mailto:Ctk-developers at commontk.org>
>             http://public.kitware.com/cgi-bin/mailman/listinfo/ctk-developers
>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/ctk-developers/attachments/20130826/296481b5/attachment.html>


More information about the Ctk-developers mailing list