Я пытаюсь создать простой проект C ++ (исполняемый файл), который вызывает функцию Haskell,
используя Shake для скрипта сборки и вызывая Stack из скрипта для сборки библиотеки Haskell.
Допустим, библиотека Haskell называется haskell-simple-lib
,
Сценарий Shake вызывает stack install haskell-simple-lib
который выводит .so
файл: libHShaskell-simple-lib-*version*-*unique identifier*.so
Мои правила Shake зависят от имен файлов, и поэтому я не могу использовать вышеупомянутое имя, так как заранее не знаю, каким будет уникальный идентификатор. Итак, скрипт Shake запускает cp
в файле для _build/libHShaskell-simple-lib.so
Параметры ссылок для исполняемого файла C ++ имеет -L_build
а также -lhaskell-simple-lib
,
Когда я пытаюсь запустить исполняемый файл, я получаю сообщение об ошибке:
error while loading shared libraries: libHShaskell-simple-lib-0.1.0.0-8DkaSm3F3d44RUd03fOuDx-ghc7.10.2.so: cannot open shared object file: No such file or directory
Но если я переименую файл, я скопировал в _build
, к первоначальному названию stack install
выводится (с уникальным идентификатором), исполняемый файл работает правильно.
Казалось бы, все, что мне нужно сделать, это просто cp
файл в _build
без стирания уникального идентификатора из имени, однако мне нужно знать имя .so
Заранее запустите файл для сценария встряхивания.
Я не понимаю, почему при запуске исполняемого файла ищется имя файла .so. Флаг ссылки не упоминает полное имя .so
тот stack install
выводится только libHShaskell-simple-lib
,
Может ли быть так, что оригинальное имя встроено в файл .so? Если да, то как можно решить эту проблему?
РЕДАКТИРОВАТЬ:
Я знаю, что это можно решить с помощью фиктивного файла, но я хотел бы знать, есть ли лучший способ сделать это.
Исходный идентификатор встроен в .so
, Я не помню все детали, но я знаю, что я решил такие проблемы, используя rpath
вертеться в прошлом.
Других решений пока нет …