ldc2 -static 失败 ld.gold 错误找不到 -lphobos2-ldc -ldruntime-ldc

ldc2 -static fails ld.gold error cannot find -lphobos2-ldc -ldruntime-ldc

tl;dr LDC 编译并且 link 在使用 -static 标志之前一切正常,然后 ld.gold 找不到 phobos 或 d运行时间图书馆。

OS:Gentoo 64 位 内核:5.4.48 DMD版本:2.090 LDC2 版本:1.20.1(DMD v2.090.1,LLVM 10.0.0)

我正在尝试静态 link 我制作的一些文件,这样二进制文件就可以 运行 而不需要 phobos。如果我尝试使用 dmd 或 ldc2 编译,一切正常,但是当我使用以下编译时:

$ ldc2 -static -main filename

我收到以下错误:

/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/../../../../x86_64-pc-linux-gnu/bin/ld.gold: error: cannot find -lphobos2-ldc
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/../../../../x86_64-pc-linux-gnu/bin/ld.gold: error: cannot find -ldruntime-ldc```

还有很多 error: undefined reference to 'XYZ' 我认为是由于缺少 phobos 和 d运行time 库造成的。

我已经尝试 运行ning cc 自己指定我的 libphobos2-ldc-shared.so 和 libd运行time-ldc-shared.so 文件的位置,而指定这些文件,结果相同:

$ /usr/bin/cc scans.o -static -o scans -fuse-ld=gold -L/usr/lib/ldc2/1.20/lib64 -libphobos2-ldc-shared.so -libdruntime-ldc-shared.so -Wl,--gc-sections -lrt -ldl -lpthread -lm -m64 -v

/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/../../../../x86_64-pc-linux-gnu/bin/ld.gold: error: cannot find -libphobos2-ldc-shared.so
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/../../../../x86_64-pc-linux-gnu/bin/ld.gold: error: cannot find -libdruntime-ldc-shared.so

我也尝试在我的 ~/.bashrc 中更新 LD_LIBRARY_PATHS(并在更改后获取它),但这没有效果。

我似乎找不到其他人遇到过这个或类似的问题,但我觉得这可能与 gentoo 如何处理不同的 D 编译器有关。

我已经尝试使用 eselect 和 layman 方向,删除 ldc2 以遵循每种方法的方向,但没有效果。令人担忧的是,wiki (https://wiki.gentoo.org/wiki/Dlang#Executables_paths) 中提到的可执行文件和库路径在我的系统上不存在。我也找不到任何 ldc2 配置文件,添加和编辑 ~/.ldc2 或 ~/.config/ldc2 也没有任何改变。

我现在也尝试删除 dub、dmd、ldc2 和 layman,然后重新安装(首先是 layman,添加覆盖,然后安装 dmd 和 ldc2),但我遇到了同样的问题,以及路径和配置文件仍然不在 dlang 上的 gentoo wiki 所说的地方。

对于解决此问题需要做些什么有什么想法吗?

在gentoo中,有一个我没有看到的使用标志static-libs。我重新编译了这个标志,它工作正常。