Ответ 1
Это действительно одна из основных причин, по которой 7.8 переключился на динамический GHCi по умолчанию. Вместо того, чтобы пытаться поддерживать каждую функцию каждого формата объектного файла, он создает динамические библиотеки и позволяет обрабатывать динамический загрузчик системы.
Попробуйте построить с опцией g++ -fno-weak
. На странице руководства g++:
-fno-слабая
Не используйте слабую поддержку символов, даже если она предоставляется компоновщиком. По умолчанию g++ будет использовать слабые символы, если они доступны. Этот параметр существует только для тестирования и не должен использоваться конечными пользователями; это приведет к утере кода и не принесет никаких преимуществ. Эта опция может быть удалена в будущей версии g++.
Еще одна проблема с __dso_handle
. Я обнаружил, что вы можете, по крайней мере, загрузить библиотеку и, по-видимому, работать, связав файл, который определяет этот символ. Я не знаю, приведет ли этот хак к чему-то другому.
Итак, в X.cabal добавьте
if impl(ghc < 7.8)
cc-option: -fno-weak
c-sources: cbits/dso_handle.c
где cbits/dso_handle.c
содержит
void *__dso_handle;