On 4/13/18 3:47 PM, Jesse Phillips wrote:
On Friday, 13 April 2018 at 18:04:38 UTC, Jonathan Marler wrote:
Error: symbol "__module_config_foo" needed by main.o is not defined
The linker error isn't great, but it prevents potential runtime
errors. Also, if you use the compiler instead of the linker you'll
get a nice error message.
dmd foo.o main.o
Error: main.o expected module foo to be compiled without
-version=FatFoo but foo.o was compiled with it
The issue I have here is that Main doesn't need to be compiled with the
versions defined by its dependents.
So if someone defines a version list in their dub.sdl then all those
versions need to be defined in my dub.sdl when in reality I don't care
and just want to link to the library with those versions defined.
Yes, the problem is that the tool is too blunt. We really only need to
worry about version differences when the layout is affected. When the
symbols are affected, it won't link anyway. This is the issue with the
dip1000 problems.
It's perfectly natural or normal to have version statements only affect
implementation, which are fine to link against without worrying about
the versions defined.
I don't know if the compiler can determine if a version statement
affects the layout, I suppose it could, but it would have to compile
both with and without the version to see. It's probably an intractable
problem.
-Steve