Я пытаюсь создать динамическое приложение с помощью GHC, это мой файл кабала:
executable app
main-is: Main.hs
c-sources: cbits/foo.cpp
cc-options: -shared -fPIC
include-dirs: /usr/local/lib/llvm-6.0/include
extra-libraries: stdc++ clang
extra-lib-dirs: /usr/local/lib/llvm-6.0/lib
other-modules:
...
Мне нужно использовать FFI, и я работаю на MacOS.Я получаю сообщение об ошибке компоновщика:
Неопределенные символы для архитектуры x86_64: "_clangToJSON", на который ссылается: _ClangziCParser_hppTree_info в CParser.o
Это действительно чужая функциячто я пытаюсь получить доступ, я добился успеха со следующими аргументами для ghc в Makefile:
Сборка FFI impl, разделяемая библиотека:
clang -fPIC -shared foo.cpp -o foo.so
Сборка Main.hs собщая библиотека foo.so:
ghc -dynamic Main.hs -o -lfoo -L. -optl-Wl,-rpath,'$ORIGIN'
Мне удалось настроить cabal в режиме dynamic
с --enable-shared
, но мне нужно, чтобы clang внутри cabal генерировал .so.Я ищу в dist/build/app
и не могу найти .so, даже с опцией -shared
, добавленной к моему cc-options
.Как я могу сгенерировать .so, а затем заставить клику динамически связываться с ним?