Monnoroch
@Monnoroch

Shared library на D?

Есть ли способ кроссплатформенно собрать .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. Сделал пулл реквест с патченными мэйкфайлами в официальный репозиторий, посмотрим, примут ли, но у себя все собрал, всем спасибо.
  • Вопрос задан
  • 3625 просмотров
Пригласить эксперта
Ответы на вопрос 3
@egorinsk
Если тут не ответят, вам стоит написать прямо в mailing list этого компилятора, там-то точно должны знать.
Ответ написан
Комментировать
@mithraen
Похоже -fPIC компилятором просто игнорируется.
На x86 возможна сборка shared libs без -fPIC. На x86_64 — нет.
Ответ написан
Monnoroch
@Monnoroch Автор вопроса
Решением оказалось собрать сами druntime и phobos вручную с включенной опцией gcc и dmd -fPIC. Сделал пулл реквест с патченными мэйкфайлами в официальный репозиторий, посмотрим, примут ли, но у себя все собрал, всем спасибо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы