" Then just copy the right version of the OSG DLLs into your app's bin directory (with its executable) and the osgPlugins-VERSION directory there too (with the plugins inside the directory).
..somepath/bin/myapp.exe ..somepath/bin/osg.dll ..somepath/bin/<all other dlls you need> ..somepath/bin/osgPlugins-x.y.z/osgdb_freetype.dll ..somepath/bin/osgPlugins-x.y.z/<all other plugins you need> " I should review the code as I suspect it uses relative paths to retrieve the plugins. If so, there should be a clause that client code must not dominate the CWD as ours currently does. One thing I know for sure is that this path setup does not work right with our game in its current state. Thanks for taking the time out to explain. Hopefully we may find a better solution. James Killian ----- Original Message ----- From: Jean-Sébastien Guay To: OpenSceneGraph Users Sent: Thursday, May 28, 2009 8:07 PM Subject: Re: [osg-users] Can I change the plugin directory structure? Hello Rick, > I have noticed that for the past little while the plugins are compiled > to their own directory with the version number. I am not quite sure why > this is beneficial, it seems like you would always want the plugins > compiled with the version of OSG you have compiled, and it seems that > having them in the same folder with the other binaries ensures that the > proper dll's will be found. Well, copying the plugins into the same directory as your application ensures that *some* *version* of the plugin will be found, not necessarily the right one (unless you're extra careful). There have been enough cases in the past of people only updating the main OSG DLLs, omitting to also update the plugins, and then running into an application crash (because of ABI changes between versions) that motivated Robert to do something better. Using the osgPlugins-VERSION subdirectory ensures that OSG will find the *right* *version* of the plugins. Since OSG (specifically osgDB::Registry) knows its own version, it can look in the right directory for the plugins. > I know when I try to run any of the example > projects from Visual Studio, that it always complains about the plugins > not being there until I copy them all over to the bin directory where > the other binaries are. Perhaps I am doing something wrong and I am > missing some really cool feature related to having them in their own > version labeld directory? Yep, they're not meant to be in the same directory as the main OSG DLLs, they're meant to be in the osgPlugins-VERSION directory under that. Running the INSTALL target from Visual Studio will give you that automatically. Being able to run an example directly from Visual Studio (using Set As Active Project and pressing F5) is another issue. You need to first run at least the ALL_BUILD target, so that all plugins will be built. That's because none of the OSG DLLs or examples have the plugins as dependencies, as it should be - the plugins are dynamically loaded, and as such no executable can know /a/ /priori/ which plugins it will need, it all depends on what is loaded either from the command line or the code. Once you've run the ALL_BUILD target (or INSTALL, which depends on ALL_BUILD) then the examples will find the plugins just fine, you can run them with F5 no problem. > I have several versions of OSG on my machine, for different projects, > and I want to avoid the DLL hell that might arise from having an > environment variable or whatever telling me where they go. Then just copy the right version of the OSG DLLs into your app's bin directory (with its executable) and the osgPlugins-VERSION directory there too (with the plugins inside the directory). ...somepath/bin/myapp.exe ...somepath/bin/osg.dll ...somepath/bin/<all other dlls you need> ...somepath/bin/osgPlugins-x.y.z/osgdb_freetype.dll ...somepath/bin/osgPlugins-x.y.z/<all other plugins you need> > Is there a way to tell CMake to just put > all the binaries in the same directory? Yes, it's called the INSTALL target. Just set your CMAKE_INSTALL_PREFIX to some directory where you want the latest OSG binaries+libs+headers to be placed, generate the project files, and run the INSTALL target from the Visual Studio solution. Same goes for Unix - set CMAKE_INSTALL_PREFIX, generate the makefiles, and run 'make install'. Incidentally, this has been discussed a lot in the past, so searching the archives would have turned up all this info, but perhaps in a more fragmented fashion (across many posts), so I thought I'd sum it all up as direct replies to your questions. It's also discussed in the Platform Specifics/Visual Studio page on the Wiki (see the last section, called "Important note about plugins"). http://www.openscenegraph.org/projects/osg/wiki/Support/PlatformSpecifics/VisualStudio Hope this helps, J-S -- ______________________________________________________ Jean-Sebastien Guay jean-sebastien.g...@cm-labs.com http://www.cm-labs.com/ http://whitestar02.webhop.org/ _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
_______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org