On 2020-04-14 18:44:55 +0000, Steven Schveighoffer said:

On 4/14/20 2:29 PM, Robert M. Münch wrote:

Ah, ok. That's why the problem went (temporarly) away when I did a: myCstruct a = {0,0}; for example?

I don't know what causes it to be emitted when. Sometimes it doesn't make a whole lot of sense to me.

Hu... I wouldn't expect this to behave arbitrary...

Yes, everything is "extern(C) :" for the complete import files.

Then apparently the compiler still expects to have initializers even for foreign language structs.

Which surprised me, or more precise, I don't understand why these are not done implicitly using the D basic-type initializers.

This is not a huge issue though, as the structs are ABI compatible even if compiled in D.

Yes, fortunately.

Are you compiling the D file that contains the struct definition as well?

No. Is that the missing part?


Probably. I think the compiler expects whatever is compiling the imported file to provide the symbol. If you aren't compiling it separately, then you need to include it in the compilation.

The C lib contains the smybols and I thought that the compiler just needs the imports to get an idea about the structures, types, etc. and later on the links resolves everything.

But, it works when I explicitly add the import source files to the VisualD project. Not sure what difference this makes, because the source can be compiled without any problems with/without those files added. But it seems that the linker now sees different things.

What's strange is, that for a dub project that uses the same imports, I didn't had to add them to the dub.json file. There, it just works without any problems.

All a bit strange and confusing...

--
Robert M. Münch
http://www.saphirion.com
smarter | better | faster

Reply via email to