Есть ли способ кроссплатформенно собрать .so на D?
В данный момент столкнулся с тем, что на одной машине (ubuntu 12.04, x86) собирается, и более того, полностью работает, а на другой (та же ОС, x86-64) нет.
Собираю так:
dmd -c -fPIC test.d -I. -J.
gcc test.o -shared -lrt -lpthread -lphobos2 -o libtest.so
На одной машине (x86) все собирается и работает, на другой же (x86-64) удачно проходит первая команда: компиляция, сборка же с помощью gcc дает следующую ошибку:
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libphobos2.a(minfo.o): relocation R_X86_64_32 against `.data' can not be used when making a shared object; recompile with -fPIC
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libphobos2.a: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
make: *** [test] Ошибка 1<br>
Версия dmd самая последняя, свежескачанная. Версия gcc 4.7 (была 4.6, там та же фигня происходила).
Так же несмотря на то, что оно само по идее должно определять, пробовал выставлять флаг -m64 для обоих команд, без изменения результата.
Соответственно, вопрос: можно ли, и если да, то как, собрать динамическую библиотеку на D на 64битной системе? Использование dmd не принципиально, то есть, все-таки референсный компилятор хотелось бы оставить, но если не возможно, то другие имплементации тоже хорошо.
Upd: Решением оказалось собрать сами druntime и phobos вручную с включенной опцией gcc и dmd -fPIC. Сделал пулл реквест с патченными мэйкфайлами в официальный репозиторий, посмотрим, примут ли, но у себя все собрал, всем спасибо.