Skip to content

Dependency linking error with LDC on Windows #7407

@vladimmi

Description

@vladimmi

Xmake Version

3.0.7

Operating System Version and Architecture

Windows 10 22H2 19045

Describe Bug

Basic project with Dlang toolset (to use LDC) and dub package dependency fails with linker error:

error: Error: C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.50.35717\bin\HostX64\x64\link.exe failed with status: 1104

When I try to run the link command from verbose log manually in project dir, it shows better error:

> C:\tools\ldc\bin\ldc2.exe -m64 -L-libpath:C:\Users\redacted\AppData\Local\dub\packages\onetricks-d\0.0.2\onetricks-d -Lonetricks-d.lib -ofbuild\windows\x64\release\xmake-test.exe build\.objs\xmake-test\windows\x64\release\src\main.d.obj
LINK : fatal error LNK1104: cannot open file 'ibpath:C:\Users\redacted\AppData\Local\dub\packages\onetricks-d\0.0.2\onetricks-d.lib'
Error: C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.50.35717\bin\HostX64\x64\link.exe failed with status: 1104

As you can see, -L-libpath argument is broken. Using slash flags according to link help (-L/libpath:...) works. Same project with dub doesn't invoke link at all, it seems, and uses internal LDC linking:

ldc2 -of<...>\dub-test.exe <...>\dub-test.obj <...>\onetricks-d.lib -mscrtlib=msvcrt

Expected Behavior

Successful compilation and linking

Project Configuration

add_rules("mode.debug", "mode.release")
add_requires(
    "dub::onetricks-d ~0.0.2"
)

target("xmake-test")
    set_kind("binary")
    set_toolchains("dlang")
    add_packages("dub::onetricks-d")
    add_files("src/*.d")

Additional Information and Error Logs

> xmake f -cvD
checking for platform ... windows
checking for architecture ... x64
checking for cl.exe ... C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.50.35717\bin\HostX64\x64\cl.exe
checking for Microsoft C/C++ Compiler (x64) ... ok
checking for Microsoft Visual Studio (x64) version ... 2026
checkinfo: cannot runv(nim.exe --version), No such file or directory
checking for nim ... no
checking for git ... C:\Program Files\Git\cmd\git.exe
checkinfo: cannot runv(gzip.exe --version), No such file or directory
checking for gzip ... no
checking for 7z ... C:\tools\xmake\winenv\bin\7z
finding onetricks-d from dub ..
checking for dub ... C:\tools\ldc\bin\dub.exe
checking for dub::onetricks-d ... onetricks-d ~0.0.2
checkinfo: cannot runv(dmd.exe --version), No such file or directory
checking for dmd ... no
checking for ldc2 ... C:\tools\ldc\bin\ldc2.exe
configure
{
    plat = windows
    vs = 2026
    arch = x64
    ccache = true
    mode = release
    host = windows
    builddir = build
    kind = static
    ndk_stdcxx = true
    clean = true
}
> xmake -vD
checking for ldc2 ... C:\tools\ldc\bin\ldc2.exe
checking for the dlang compiler (dc) ... ldc2.exe
checking for C:\tools\ldc\bin\ldc2.exe ... c:\tools\ldc\bin\ldc2.exe
checking for flags (--O3 --release --boundscheck=off) ... ok
> ldc2.exe "--O3" "--release" "--boundscheck=off" "-m64"
checking for ldc2 ... C:\tools\ldc\bin\ldc2.exe
checking for the dlang linker (dcld) ... ldc2.exe
[ 47%]: linking.release xmake-test.exe
C:\tools\ldc\bin\ldc2.exe -m64 -L-libpath:C:\Users\redacted\AppData\Local\dub\packages\onetricks-d\0.0.2\onetricks-d -Lonetricks-d.lib -ofbuild\windows\x64\release\xmake-test.exe build\.objs\xmake-test\windows\x64\release\src\main.d.obj
error: @programdir\core\main.lua:274: @programdir\actions\build\main.lua:161: @programdir\modules\async\runjobs.lua:261: @programdir\modules\private\action\build\link_objects.lua:59: @programdir\core\sandbox\modules\os.lua:273: Error: C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.50.35717\bin\HostX64\x64\link.exe failed with status: 1104

stack traceback:
    [C]: in function 'error'
    [@programdir\core\base\os.lua:1129]:
    [@programdir\core\sandbox\modules\os.lua:273]: in function 'runv'
    [@programdir\modules\core\tools\dmd.lua:197]:
    [C]: in function 'xpcall'
    [@programdir\core\base\utils.lua:258]:
    [@programdir\core\tool\linker.lua:234]: in function 'link'
    [@programdir\modules\private\action\build\link_objects.lua:59]: in function 'callback'
    [@programdir\modules\core\project\depend.lua:227]: in function 'on_changed'
    [@programdir\modules\private\action\build\link_objects.lua:39]: in function '_do_link_target'
    [@programdir\modules\private\action\build\link_objects.lua:73]: in function 'job_func'
    [@programdir\modules\async\runjobs.lua:441]:
    [C]: in function 'xpcall'
    [@programdir\core\base\utils.lua:258]: in function 'trycall'
    [@programdir\core\sandbox\modules\try.lua:117]: in function 'try'
    [@programdir\modules\async\runjobs.lua:410]: in function 'cotask'
    [@programdir\core\base\scheduler.lua:514]:

stack traceback:
        [C]: in function 'error'
        @programdir\core\base\os.lua:1129: in function 'os.raiselevel'
        (...tail calls...)
        @programdir\core\main.lua:274: in upvalue 'cotask'
        @programdir\core\base\scheduler.lua:514: in function <@programdir\core\base\scheduler.lua:507>

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    Status

    Done

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions