Dll support: testers needed

Benjamin Thaut code at benjamin-thaut.de
Thu Jan 11 18:56:23 UTC 2018


Am 11.01.2018 um 05:10 schrieb Domain:
> I restart my computer, and it can produce dll now. But when I compile exe:
> dmd -m64 -useshared app.d -ofapp.exe
> 
> app.obj : error LNK2019: 无法解析的外部符号 
> _D3std12experimental6logger4core17stdThreadLocalLogFNdNfZCQCeQCdQBsQBo6Logger, 
> 该符号在函数 
> _D3std12experimental6logger4core__T18defaultLogFunctionVEQCdQCcQBrQBn8LogLeveli64Z__TQByVii9VAyaa5_6170702e64VQra8_6170702e6d61696eVQBna15_766f6964206170702e6d61696e2829VQCza3_617070TQDmZQFwFNfLQDxZv 
> 中被引用

As I said in the first post, I'm not interrested in linker errors due to 
missing 'export' annotation. std.experimental.logger does not have an 
export annotations and therefor will cause linker errors. If you 
absolutely must use std.experimental.logger you will have to annotate it 
with 'export' and recompile phobos. The idea behind my initial PR is to 
build in basic support for dlls, not to fully annotate all of phobos 
with 'export'.

> 
> dmd -m64 app.d -ofapp.exe
> dmd -m64 -shared dll1.d -ofdll1.dll
> dmd -m64 -shared dll2.d -ofdll2.dll

Your command line is wrong. You are missing the -useshared option and 
therefore your dlls / executable don't share the same version of druntime.

> 
> output:
> 
> 2018-01-11T12:04:51.635:app.d:main:9 Loading dll1.dll
> 2018-01-11T12:04:51.894:dll1.d:start:22 dll1 starting
> MyLogger: dll1 started
> 2018-01-11T12:04:51.897:app.d:main:14 Loading dll2.dll
> 2018-01-11T12:04:52.164:dll2.d:start:9 dll2 started

How can you get the output of your program if it fails to link?

-- 
Kind Regards
Benjamin Thaut


More information about the Digitalmars-d mailing list