[osg-users] Can't createGraphicsContext if I statically link OSG to my app

Robert Osfield robert.osfield at gmail.com
Fri Nov 20 08:57:42 PST 2009


Hi  Iñaki,

For any static build work with the OSG I strongly recommend using the
latest stable release (2.8.2) or svn/trunk.  Prior to this static
build really wasn't robust or clean enough to work properly.

Robert.

On Fri, Nov 20, 2009 at 10:14 AM, Iñaki García <igarcia at euve.org> wrote:
> Hi Robert,
>
> I hadn't tried osgstaticviewer since I didn't found it among the source code
> examples, I didn't know there are more examples on the wiki. Now I've seen
> that it's necessary to add:
> USE_GRAPHICSWINDOW()
> and that those things with mangled_names can be replaced by USE_OSGPLUGIN
> (the last time I used OSG was in version 1.2).
>
> When I recover the time lost, I will have a look at how this
> select-the-platform works.
>
> Thank you very much
>
> Iñaki
>
> Robert Osfield escribió:
>>
>> Hi Iñaki,
>>
>> Have you tried osgstaticviewer?  Please have a look at it, it's the
>> definitive way to get the OSG working statically.
>>
>> Robert.
>>
>> On Wed, Nov 18, 2009 at 6:21 PM, Iñaki García <igarcia at euve.org> wrote:
>>
>>>
>>> Hi Robert,
>>>
>>> I know the issue with the dynamic plugin registration, and the "mangled
>>> names" that I have to force including in order to make the plugins link
>>> into
>>> my binary. But what is very rare is that I *explicitly* call
>>> createGraphicsContext, which calls windowingSystemInterfaceRef, which
>>> returns NULL when returning a reference to a static variable. And that
>>> doesn't make sense to me.
>>>
>>> Under this circumstances, can the linker exclude
>>> windowingSystemInterfaceRef? And when a non-existing function is called,
>>> returning NULL is enough? (crash, freeze or explode seems more suitable)
>>>
>>> Another possibility is that the function exists but that static variable
>>> hasn't been allocated? Why shouldn't it be allocated from the beginning?
>>> In
>>> case it can give a clue, I´m running the debug build, without
>>> optimizations.
>>>
>>> Chris:
>>> Do you mean that a static "local-to-a-function" variable must be created
>>> by
>>> someone, and that the DLL init does and my app doesn't? I'm not very
>>> experienced on this memory-related details.
>>>
>>> Iñaki
>>>
>>> Robert Osfield escribió:
>>>
>>>>
>>>> Hi Iñaki? García?
>>>>
>>>> Could you sign with the name you wish to be addressed as, as it makes
>>>> it easier to avoid addressing you incorrectly, thanks.
>>>>
>>>> W.r.t getting things working under a static build, the main problem
>>>> that you have to deal with is that the compiler will not bother
>>>> linking in symbols that aren't explicitly used, so they default the
>>>> OSG's proxy registration schemes such as used in osgViewer and osgDB
>>>> for the plugins.  This means you have to add these symbols in your
>>>> app.  Have a look at the osgstaticviewer to see the easist way to do
>>>> this.
>>>>
>>>> Robert.
>>>>
>>>> On Wed, Nov 18, 2009 at 5:22 PM, Iñaki García <igarcia at euve.org> wrote:
>>>>
>>>>
>>>>>
>>>>> Hi everybody:
>>>>>
>>>>> I've a working application (Windows, MFC) with an OSG scene in one
>>>>> window,
>>>>> that works correctly when I use OSG's DLLs. But, in order to distribute
>>>>> it,
>>>>> I prefer an all-in-one executable, so I've built OSG v2.8.2 statically,
>>>>> linked to my app with success.
>>>>>
>>>>> But when I run it, it does not display anything in its window. I've
>>>>> debugged
>>>>> the differences between the statically and dynamically versions to a
>>>>> point.
>>>>> In the statically built, the:
>>>>> osg::GraphicsContext::createGraphicsContext(traits.get())
>>>>> returns NULL, and in dynamically doesn't.
>>>>>
>>>>> If I debug deeper, I find it's because:
>>>>> windowingSystemInterfaceRef()
>>>>> returns NULL
>>>>>
>>>>> And that's because that function is:
>>>>> static ref_ptr<GraphicsContext::WindowingSystemInterface>
>>>>> &windowingSystemInterfaceRef()
>>>>> {
>>>>>  static ref_ptr<GraphicsContext::WindowingSystemInterface>
>>>>> s_WindowingSystemInterface;
>>>>>  return s_WindowingSystemInterface;
>>>>> }
>>>>>
>>>>> My questions:
>>>>> How can that function return NULL? Why a different behaviour between
>>>>> static
>>>>> and dynamic linkage?
>>>>>
>>>>> Best regards
>>>>> --
>>>>> * Iñaki García
>>>>> División de Ingeniería - Engineering Division
>>>>> European Virtual Engineering (EUVE) <http://www.euve.org>*
>>>>> Avenida de los Huetos 79, "Edificio azucarera"
>>>>> 01010 Vitoria-Gasteiz (Álava) - Spain
>>>>> Tel: +34 945 21 46 46   Fax: +34 945 21 46 47
>>>>> _______________________________________________
>>>>> 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
>>>>
>>>>
>>>>
>>>
>>> _______________________________________________
>>> 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
>>
>>
>
> _______________________________________________
> 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