Maarten Boekhold wrote:Suppose I have a plugin library that contains calls that reside in the executable that dlopen()'s that plugin. You can link such a plugin by using a .def file that contains something like:
IMPORTS symbol = executable.exe.symbol
Now if I need to be able to use the *same* plugin from *two* executables, how do I resolve that??? Can I use a .def file that contains:
IMPORTS symbol = executable_1.exe.symbol symbol = executable_2.exe.symbol
My gut feeling says 'no', but hope against hope...
Well, shortly... You can't do that. Since windows exports are binded to name of library (application) and symbol...
Long way: You can do it, but you need to take alternative route.
You need one extra DLL that has imports symbol from executable and ex-exports symbol you need forward to plugin:
for plugin you need to do following:
IMPORT symbol = helper.dll.symbol
and for both apps you create own helper.dll:
app1.exe create helper.dll: IMPORT symbol = app1.exe.symbol
EXPORT symbol
app2.exe create helper.dll: IMPORT symbol = app2.exe.symbol
EXPORT symbol
And finally...
Or even better, DTRT in windoze world is to pass needed symbol pointers as arguments to plugin function, since windows libraries and applications doesn't allow unresolved symbols in linktime (so called backlinking issue)...
hmm,
stubs:
(intermediate dll, which dlopen's dependent on
various issues another dll. platform, release, required feature se: pro/basic, language)
lazy linking: resolve at run-time. as soon as it will be added to ld. -- Reini Urban http://xarch.tu-graz.ac.at/home/rurban/
-- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/