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 <[email protected]> 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
[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