[osg-users] osgDB ifstream / ofstream conflict

Vincent Bourdier vincent.bourdier at gmail.com
Fri Apr 29 07:31:23 PDT 2011


Hi,

But what is the best solution ? I just have some hesitation to modify 
the linker settings instead of solving the problem for real... but if it 
is the best way...

Regards,
     Vincent

Le 29/04/2011 15:23, Frederic Bouvier a écrit :
> Hi,
>
> yes, adding /FORCE:MULTIPLE to the linker command line was the only workaround I found
>
> Regards,
> -Fred
>
>
> ----- "Brad Christiansen" a écrit :
>
>> Hi,
>>
>>
>>
>> This seems to be the same / related to an issue raised some time ago
>> with VS2010.
>>
>>
>>
>> When I build VirtualPlanetBuilder with VS2010 I get errors complaining
>> about duplicate definitions of the stream destructors (cant remember
>> the details of hand). The same code works without issue on non-windows
>> platforms and all other VS compilers tried.
>>
>>
>>
>> As I don't have time to look into the issue I simply force the link to
>> complete with multiply defined symbols.
>>
>>
>>
>>
>>
>> A quick search through my local OSG-users archive found the thread +
>> message included bellow. Do a search through the archives around this
>> topic and you should find all the details.
>>
>>
>>
>> Cheers,
>>
>>
>>
>> Brad
>>
>>
>>
>>
>>
>>
>>
>> Re: [osg-users] OT: VS2010 LNK2005 problem related to ostringstream
>>
>>
>>
>> Ok, I have localized the problem.
>>
>>
>>
>> For example, the class osgDB::fstream:
>>
>>
>>
>> class OSGDB_EXPORT fstream : public std::fstream
>>
>> {
>>
>>
>>
>> };
>>
>>
>>
>> which just inherits from std:.fstream causes the symbols of
>> std::fstream to be exposed into osgDB.dll
>>
>>
>>
>> This effectively means that It might cause problems for people linking
>> against osgDB.dll later on.
>>
>> Same goes for inheriting from std::string, std::ostringstream etc.
>>
>>
>>
>> This must obviously be a bug, a very serious one in VS2010.
>>
>> We had a class derived from std::ostringstream, which exposed the
>> symbols in the vtable for the class:
>>
>>
>>
>> namespace ns
>>
>> {
>>
>> class Notify : public std::ostringstream
>>
>> {
>>
>> };
>>
>> }
>>
>>
>>
>> Using depends.exe to analyze the dll-file gives:
>>
>>
>>
>> const ns::Notify::`vftable'{for `std::basic_ostringstream<char,struct
>> std::char_traits<char>,class std::allocator<char>  >'}
>>
>>
>>
>> My issue was reported to the msdn forum. Their first take was: Oh you
>> use CMake, thats not our product :-)
>>
>> But in later threads, they tried to reproduce the problem without
>> luck...
>>
>> So if you manage to reproduce this in a small example, go ahead and
>> post it. We must make them aware of this problem.
>>
>>
>>
>> http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/191de00a-53c9-4bd9-9cb6-e844eb224ca2
>>
>>
>>
>> /Anders
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> From: osg-users-bounces at lists.openscenegraph.org
>> [mailto:osg-users-bounces at lists.openscenegraph.org] On Behalf Of
>> Vincent Bourdier
>> Sent: Wednesday, 27 April 2011 11:47 PM
>> To: osg user
>> Subject: Re: [osg-users] osgDB ifstream / ofstream conflict
>>
>>
>>
>> Hi,
>>
>> Sorry to insist but I would appreciate any advices about this issue.
>> Maybe I'm the only one who encountered it, but the patch I did is not
>> so... "clean" to my mind...
>>
>> Thanks.
>>
>> Regards,
>> Vincent.
>>
>> Le 21/04/2011 14:50, Vincent Bourdier a écrit :
>>
>> Hi all,
>>
>> I just found a fix after some tests, but it is not a fix I am proud
>> of.
>> I just added the close() method in osgDB/fstream implementation, so
>> there is no conflict because my fstream implementation uses
>> osgDB/fstream and not osgDB/fstream AND std::fstream.
>>
>> I will continue to investigate to be sure to understand why this
>> occurs, but any advices or explanations are welcome.
>> If my fix is accepted this could be a submission for OSG,
>> eventually...
>>
>> Thanks.
>>
>> Regards,
>> Vincent.
>>
>> Le 20/04/2011 14:54, Vincent Bourdier a écrit :
>>
>> Hi Mourad
>>
>> Thanks for your answer but I already checked that. TsLib_MDdNET2010 is
>> a static lib but linked with /MD(d), like my application...
>>
>> Vincent.
>>
>> Le 20/04/2011 11:50, Mourad Boufarguine a écrit :
>>
>>
>> Hi Vincent,
>>
>>
>> On Mon, Apr 4, 2011 at 4:36 PM, Vincent Bourdier<
>> vincent.bourdier at gmail.com>  wrote:
>>
>>
>> 2>TsLib_MDdNET2010.lib(IwPoly.obj) : error LNK2005: "public: void
>> __thiscall std::basic_ifstream<char,struct std::char_traits<char>
>>> ::close(void)"
>> (?close@?$basic_ifstream at DU?$char_traits at D@std@@@std@@QAEXXZ) already
>> defined in osgDBd.lib(osg65-osgDBd.dll)
>> 2>TsLib_MDdNET2010.lib(IwBrepData.obj) : error LNK2005: "public: void
>> __thiscall std::basic_ifstream<char,struct std::char_traits<char>
>>> ::close(void)"
>> (?close@?$basic_ifstream at DU?$char_traits at D@std@@@std@@QAEXXZ) already
>> defined in osgDBd.lib(osg65-osgDBd.dll)
>>
>>
>>
>>
>> It seems like a static/dynamic c++ runtime conflict. Check if osg and
>> TsLib_MDdNET2010 are linked against the same type of c++ runtime (both
>> with /MTd flag or both with /MDd flag)
>>
>>
>>
>>
>>
>> Mourad
>> DISCLAIMER:---------------------------------------------------------------------------
>> This e-mail transmission and any documents, files and previous e-mail
>> messages attached to it are private and confidential. They may contain
>> proprietary or copyright material or information that is subject to
>> legal professional privilege. They are for the use of the intended
>> recipient only. Any unauthorised viewing, use, disclosure, copying,
>> alteration, storage or distribution of, or reliance on, this message
>> is strictly prohibited. No part may be reproduced, adapted or
>> transmitted without the written permission of the owner. If you have
>> received this transmission in error, or are not an authorised
>> recipient, please immediately notify the sender by return email,
>> delete this message and all copies from your e-mail system, and
>> destroy any printed copies. Receipt by anyone other than the intended
>> recipient should not be deemed a waiver of any privilege or
>> protection. Thales Australia does not warrant or represent that this
>> e-mail or any documents, files and previous e-mail messages attached
>> are error or virus free.
>> --------------------------------------------------------------------------------------
>>
>> _______________________________________________
>> osg-users mailing list
>> osg-users at lists.openscenegraph.org
>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org



More information about the osg-users mailing list