Thread overview
dub / win 64 / unresolved externals from run-time lib?
Mar 08, 2018
Robert M. Münch
Mar 08, 2018
kinke
Mar 08, 2018
Robert M. Münch
March 08, 2018
Using Dub and pretty simple setup, that links in 3 C/C++ static libraries, I get these linker errors:

libyogacore.lib(Yoga.obj) : error LNK2019: unresolved external symbol __imp_fmodf referenced in function "void __cdecl YGRoundToPixelGrid(struct YGNode * const,float,float,float)" (?YGRoundToPixelGrid@@YAXQEAUYGNode@@MMM@Z)

libyogacore.lib(Yoga.obj) : error LNK2019: unresolved external symbol __imp__CrtDbgReportW referenced in function "void * __cdecl std::_Allocate_manually_vector_aligned<struct std::_Default_allocate_traits>(unsigned __int64)" (??$_Allocate_manually_vector_aligned@U_Default_allocate_traits@std@@@std@@YAPEAX_K@Z) 


The first I don't understand as it should be in some run-time libraries. The second indicates a problem with debug / non-debug runtime libraries. However, I would expect that the correct run-time libraries are used.

I'm building my code with just: dub build --arch=x86_64

Any idea?

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

March 08, 2018
On Thursday, 8 March 2018 at 17:03:18 UTC, Robert M. Münch wrote:
> Using Dub and pretty simple setup, that links in 3 C/C++ static libraries, I get these linker errors:
>
> libyogacore.lib(Yoga.obj) : error LNK2019: unresolved external symbol __imp_fmodf referenced in function "void __cdecl YGRoundToPixelGrid(struct YGNode * const,float,float,float)" (?YGRoundToPixelGrid@@YAXQEAUYGNode@@MMM@Z)
>
> libyogacore.lib(Yoga.obj) : error LNK2019: unresolved external symbol __imp__CrtDbgReportW referenced in function "void * __cdecl std::_Allocate_manually_vector_aligned<struct std::_Default_allocate_traits>(unsigned __int64)" (??$_Allocate_manually_vector_aligned@U_Default_allocate_traits@std@@@std@@YAPEAX_K@Z)
>
>
> The first I don't understand as it should be in some run-time libraries. The second indicates a problem with debug / non-debug runtime libraries. However, I would expect that the correct run-time libraries are used.
>
> I'm building my code with just: dub build --arch=x86_64
>
> Any idea?

By the looks of it, the C(++) libs have been compiled with /MDd (debug DLL version of MSVC runtime libs), while DMD and LDC default to the static (release) libs, i.e., /MT. The according switch for DMD/LDC is `-mscrtlib` IIRC.
March 08, 2018
On 2018-03-08 17:24:32 +0000, kinke said:

> On Thursday, 8 March 2018 at 17:03:18 UTC, Robert M. Münch wrote:
>> Using Dub and pretty simple setup, that links in 3 C/C++ static libraries, I get these linker errors:
>> 
>> libyogacore.lib(Yoga.obj) : error LNK2019: unresolved external symbol __imp_fmodf referenced in function "void __cdecl YGRoundToPixelGrid(struct YGNode * const,float,float,float)" (?YGRoundToPixelGrid@@YAXQEAUYGNode@@MMM@Z)
>> 
>> libyogacore.lib(Yoga.obj) : error LNK2019: unresolved external symbol __imp__CrtDbgReportW referenced in function "void * __cdecl std::_Allocate_manually_vector_aligned<struct std::_Default_allocate_traits>(unsigned __int64)" (??$_Allocate_manually_vector_aligned@U_Default_allocate_traits@std@@@std@@YAPEAX_K@Z) 
>> 
>> 
>> 
>> The first I don't understand as it should be in some run-time libraries. The second indicates a problem with debug / non-debug runtime libraries. However, I would expect that the correct run-time libraries are used.
>> 
>> I'm building my code with just: dub build --arch=x86_64
>> 
>> Any idea?
> 
> By the looks of it, the C(++) libs have been compiled with /MDd (debug DLL version of MSVC runtime libs),

Hi, that's correct.

> while DMD and LDC default to the static (release) libs, i.e., /MT.

Interesting... this little but important detail is not very well document. The only reference I found is [1] but nothing in the official compiler documentation page.

>  The according switch for DMD/LDC is `-mscrtlib` IIRC.

Yes, it is. Seems there is no difference between multi-threaded and non-multi-threaded.

Thanks, that worked.

[1] https://dlang.org/changelog/2.073.0.html#mscrtlib-option

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