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
。我重新编译了这个标志,它工作正常。
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
。我重新编译了这个标志,它工作正常。