2015-06-23 1 views
3

Недавно я сделал пакет для камеры, который можно увидеть here Он состоит из библиотеки и нескольких небольших примеров программ, использующих его. Все строит и работает так, как ожидалось.GHC undefined ссылка на Paths in dependency

Я хотел построить исполняемый файл в новый пакет, который использует эту библиотеку, однако я по-прежнему работать в связующей ошибку я не могу расшифровать:

/my/path/RandomAgent/.cabal-sandbox/lib/x86_64-linux-ghc-7.8.4/rlglue-0.2.1.1/libHSrlglue-0.2.1.1.a(Agent.o):(.text+0x34f1): undefined reference to `rlgluezm0zi2zi1zi1_Pathszurlglue_version1_closure' 

collect2: ошибка: л.д. возвращается статус 1 выхода Чтобы упростить диагностику, я переместил одну из примеров программ в свой новый пакет и обнаружил, что он не будет правильно создан. Вы можете найти ту версию исполняемого файла here.

Из этого я пришел к выводу, что проблема, вероятно, в том, что я делаю в своих файлах .cabal, но я не вижу, что случилось. Ошибка также, похоже, относится к модулю Paths_rlglue, который автоматически генерирует cabal для первого пакета.

Может кто-нибудь помочь мне понять, почему я получаю эту ошибку?

ответ

5

Вам необходимо включить модуль Paths_rlglue в открытые модули или другие модули, как и любой другой модуль вашего проекта, чтобы Cabal связал его.

Кабалу следует лучше рассказать вам, что происходит, см. https://github.com/haskell/cabal/issues/1746.

2

Похоже, я что-то пропустил в документации для Paths_pkgname

If you decide to import the Paths_pkgname module then it must be listed in the other-modules field just like any other module in your package.

Добавление Paths_rlglue других-модулей моей библиотеки исправили проблему. Надеюсь, это спасет кого-то все время, которое я потерял на этом.