In the application properties: Configuration Properties -> Linker -> General -> Force File Output -> Multiply Defined Symbol Only (/FORCE:MULTIPLE)
Chuck On Aug 26, 2010, at 10:11 AM, Anders Backman wrote: > How do you allow multiple symbols in VisualStudio? > /A > > On Thu, Aug 26, 2010 at 6:51 PM, Chuck Seberino <[email protected]> wrote: > Anders, > > It is somewhat relevant to OSG too, in that linking against osgDB and other > code that uses <fstream> will cause similar 'multiple-defined' linker > errors. This problem seems to be only with MSVC2010, the OS doesn't seem to > matter (I use XP). osgDB is affected because of osgDB::fstream, which > subclasses from std::fstream. The current workaround is to allow multiple > symbols when linking. I would be interested in finding a better solution to > this problem... > > Chuck > > > On Aug 26, 2010, at 9:35 AM, Anders Backman wrote: > >> Hi all. >> >> This is not related to OSG in any way, but as there so many experts on the >> list, I thought I should take the opportunity to ask this... >> >> I have a problem related to linking in VS2010. >> >> Im using VS2010 under Windows 7 (64). >> >> Im building a large source package which is divided into two separate >> libraries (dynamic linking: .lib, .dll). >> >> in the first library, a.lib we are using both std::stringstream and >> std::ostringstream. a.lib depends on other libraries, all built by myself >> using CMake and VS2010. CMake defaults to /MD code generation >> (MultiThreaded). Im using this consistently over all my libraries (just >> double checked to be sure). >> >> When I build the next library, b.lib, which depends on a.lib, I get the >> following linking errors: >> >> >> >> Linking of b.lib: >> >> 1>a.lib(a.dll) : error LNK2005: "public: void __thiscall >> std::basic_ostringstream<char,struct std::char_traits<char>,class >> std::allocator<char> >::`vbase destructor'(void)" >> (??_d?$basic_ostringstr...@du?$char_traits@d...@std@@v?$alloca...@d@2@@std@@QAEXXZ) >> already defined in ImageCapture.obj >> >> >> 1>a.lib(a.dll) : error LNK2005: "public: class std::basic_string<char,struct >> std::char_traits<char>,class std::allocator<char> > __thiscall >> std::basic_ostringstream<char,struct std::char_traits<char>,class >> std::allocator<char> >::str(void)const " >> (?...@?$basic_ostringstream@du?$char_tra...@d@std@@v?$alloca...@d@2@@std@@qbe?av?$basic_str...@du?$char_traits@d...@std@@v?$alloca...@d@2@@2...@xz) >> already defined in ImageCapture.obj >> >> 1>a.lib(a.dll) : error LNK2005: "public: __thiscall >> std::basic_ostringstream<char,struct std::char_traits<char>,class >> std::allocator<char> >::basic_ostringstream<char,struct >> std::char_traits<char>,class std::allocator<char> >(int)" >> (??0?$basic_ostringstr...@du?$char_traits@d...@std@@v?$alloca...@d@2@@std@@q...@h@Z) >> already defined in ImageCapture.obj >> >> >> >> Ok, I go into the sourcecode of ImageCapture.cpp and remove the use of >> std::ostringstream. >> >> And everything builds. >> >> Next, I try to use std::ostringstream in some other cpp file of the b.lib, >> so I just copy the code from ImageCapture.cpp into another .cpp file in >> b.lib, including the #include directives... >> >> It links just fine. >> >> >> >> One important thing to mention, all of this works just fine in VS2008. >> >> >> >> Next, I tried to change from std::ostringstream to std::stringstream in both >> a.lib AND b.lib. >> >> >> Now I get the same error, but instead its std::stringstream mentioned in the >> error message: >> >> >> >> 2>a.lib(a.dll) : error LNK2005: "public: void __thiscall >> std::basic_stringstream<char,struct std::char_traits<char>,class >> std::allocator<char> >::`vbase destructor'(void)" >> (??_d?$basic_stringstr...@du?$char_traits@d...@std@@v?$alloca...@d@2@@std@@QAEXXZ) >> already defined in ImageCapture.obj >> >> 2>a.lib(a.dll) : error LNK2005: "public: class std::basic_string<char,struct >> std::char_traits<char>,class std::allocator<char> > __thiscall >> std::basic_stringstream<char,struct std::char_traits<char>,class >> std::allocator<char> >::str(void)const " >> (?...@?$basic_stringstream@du?$char_tra...@d@std@@v?$alloca...@d@2@@std@@qbe?av?$basic_str...@du?$char_traits@d...@std@@v?$alloca...@d@2@@2...@xz) >> already defined in ImageCapture.obj >> >> 2>a.lib(a.dll) : error LNK2005: "public: __thiscall >> std::basic_stringstream<char,struct std::char_traits<char>,class >> std::allocator<char> >::basic_stringstream<char,struct >> std::char_traits<char>,class std::allocator<char> >(int)" >> (??0?$basic_stringstr...@du?$char_traits@d...@std@@v?$alloca...@d@2@@std@@q...@h@Z) >> already defined in ImageCapture.obj >> >> >> So, the situation is exactly the same, its just changed from >> std::ostringstream to std::stringstream. >> >> If I have just the right balance between stringstream and ostringstream, it >> builds. Then the problem occurs when I want to build a third library, >> depending on both a.lib AND b.lib... >> >> Then it starts all over. >> >> The next thing I did was to generate project files for vs2008, build with >> vs2008 (using dependencies built with vs2010), compiles/links just fine. >> Except it does not run (incompatible STL, crash in deque). >> >> Ok, so it builds in VS2008. Next was to build everything in vs2010 using the >> same project files. Then I get the above linking error. >> >> >> >> Im more and more leaning towards a bug in VS2010, but its really hard to >> verify... >> >> >> Anyone experienced this in VS2010? >> >> - >> >> _______________________________________________ >> osg-users mailing list >> [email protected] >> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > > _______________________________________________ > osg-users mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > > > > -- > > _______________________________________________ > osg-users mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
_______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

