certi-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [certi-dev] HLA 1516 - Circular dependency between RTI1516 and FedTi


From: Ijperen, Jeroen van
Subject: RE: [certi-dev] HLA 1516 - Circular dependency between RTI1516 and FedTime1516?
Date: Tue, 6 Apr 2010 15:24:11 +0200

> From: Eric Noulard
> Verzonden: dinsdag 6 april 2010 14:29
> > I was wondering if any of you could have me analyze the following
> problem: from what I've noticed there seems to be a circular dependency
> in the HLA 1516 specification, between the LogicalTime module, and the
> actual RTI1516 module.
> 
> Yes there is and this is definitely a design flaw (My personal point of
> view).

I'm glad you agree. I was beginning to think I was missing something. :)

> > As far as I can see, this cannot be solved except by changing the
> standardized
> > header files, which would defeat their purpose.
> 
> There should be at least 2 "theoretical" solutions:
> 
>  1) Break the circular dependency by not throwing any exception in
> libFedTime (thus you do not import RTI15616 etc...)

This might have worked for the other version, but when I tried that it kept 
complaining about wanting to import the default constructor and destructor 
for the rti1516::LogicalTime, since these are not implemented inline.
 
>  2) Compile twice, the first compilation will fail, the second one will
> work.
>      [this second solution may not be implemented using CMake because
> Cmake refuse the circular dep' alltogether]

I doubt this would work... From what I've seen the Visual Studio compiler 
doesn't generate a symbol file when linking fails. And without a symbol file, 
the other link step will fail as well.

> That said this design is simply broken.
> The fact that it is implementable on Unix is not an argument.
> LibFedTime should NEVER have to refer to libRTI --fullstop.

Agreed.

> I eagerly waiting for IEEE-1516 v2010 (aka HLA Evolved) in order to
> see if this has been fixed/changed.

That would be helpful indeed, but doesn't help with my current problem :)

> May be 3) solution would be to duplicate the imported code both in
> libFedTime and libRTI
> and let the dynamic loader chose the appropriate duplicate, I don't
> even know if it works.
> 
> Commercial RTI I know do exhibit this circular dep (observed with DLL
> explorer or similar tool)
> but I don't know how they compile that. And I didnt' asked :-)
> 
> Now I'm not a Windows expert so may be there exist some better tricks
> to deal with this kind of issue.

I am currently contemplating to duplicate the (standard) header files to 
use during compilation, with the import/export flags adjusted. I think it
may be possible to split it in such a way that the FedTime1516 can be 
compiled before the RTI1516 (but without the exceptions, etc available in
the FedTime1516).

I will keep you (all) updated.

Kind regards,

Jeroen v. IJperen
TASK24




reply via email to

[Prev in Thread] Current Thread [Next in Thread]