Я получаю сообщение об ошибке при попытке использовать Scons для создания простого D-файла. Я проверил scons, создав простой файл helloworld.c, но аналога в D просто не происходит, и я недостаточно разбираюсь в Scons, чтобы понять, является ли это ошибкой или проблемой с моей настройкой.
Ошибка, которую я получаю, ld: library not found for -lphobos
Мой файл SConstruct:
SConscript('SConscript', variant_dir='release', duplicate=0, exports={'MODE':'release'})
SConscript('SConscript', variant_dir='debug', duplicate=0, exports={'MODE':'debug'})
Мой файл SConscript:
env = Environment()
env.Program(target = 'helloworld',
source = ['hello.d'])
hello.d
import std.stdio;
void main() {
writeln("Hello, world!");
}
EDIT:
Полный вывод scons:
MyComputer:thedbook me$ scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: release debug
gcc -o debug/helloworld debug/hello.o -L/usr/share/dmd/lib -L/usr/share/dmd/src/druntime/import -L/usr/share/dmd/src/phobos -lphobos -lpthread -lm
ld: library not found for -lphobos
collect2: ld returned 1 exit status
scons: *** [debug/helloworld] Error 1
scons: building terminated because of errors.
Причина, по которой я озадачен, состоит в том, что сборка файла обычно очень проста (это случай с одним файлом helloworld):
$ dmd hello.d -v
binary dmd
version v2.058
config /usr/bin/dmd.conf
parse hello
importall hello
... <significant amount of imports here> ...
code hello
function D main
function std.stdio.writeln!(string).writeln
function std.stdio.writeln!(string).writeln.__dgliteral834
function std.exception.enforce!(bool,"/usr/share/dmd/src/phobos/std/stdio.d",1550).enforce
gcc hello.o -o hello -m64 -Xlinker -L/usr/share/dmd/lib -lphobos2 -lpthread -lm
Обратите внимание, что мне пришлось включить многословие в компиляторе, чтобы он показывал что-либо. Обычно он молча собирает и связывает файл.