tl;dr LDC 编译和链接正常,直到使用 -static 标志,然后 ld.gold 找不到 phobos 或 druntime 库。
操作系统:Gentoo 64 位内核:5.4.48 DMD 版本:2.090 LDC2 版本:1.20.1(DMD v2.090.1,LLVM 10.0.0)
我正在尝试静态链接我制作的一些文件,以便可以在不需要 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 和 druntime 库。
我尝试自行运行 cc 指定我的 libphobos2-ldc-shared.so 和 libdruntime-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
我也尝试LD_LIBRARY_PATHS
在我的 ~/.bashrc 中更新(并在更改后获取它),但这没有效果。
我似乎找不到其他人遇到过这个或类似的问题,但我觉得这可能与 gentoo 如何处理不同的 D 编译器有关。
我尝试同时使用 eselect 和外行方向,删除 ldc2 以遵循每种方法的方向,但没有效果。令人担忧的是,我的系统上不存在wiki ( https://wiki.gentoo.org/wiki/Dlang#Executables_paths )中提到的可执行文件和库路径。我也找不到任何 ldc2 配置文件,添加和编辑 ~/.ldc2 或 ~/.config/ldc2 也没有改变任何东西。
我现在也试过删除 dub、dmd、ldc2 和外行,并重新安装(外行先添加覆盖,然后安装 dmd 和 ldc2),但我遇到了同样的问题,路径和配置文件仍然不在dlang 上的 gentoo wiki 说他们应该在的地方。
关于解决这个问题需要做什么的任何想法?