Как создать статическую библиотеку с CMake и связать ее с проектом стека Haskell

Я хочу использовать стороннюю библиотеку C ++ в моем проекте на Haskell. Тем не менее, я получаю следующую ошибку при запуске stack build:

/home/ryselis/IdeaProjects/realsense-haskell/.stack-work/dist/x86_64-linux/Cabal-2.0.1.0/build/libHSrealsense-haskell-0.1.0.0-AnzRMqdjClnDgHnOUGe4TP.a(Realsense.o):ghc_16.c:function inline_c_Realsense_6: error: undefined reference to 'autoConfigurePersonTracking'
collect2: error: ld returned 1 exit status
`gcc' failed in phase `Linker'. (Exit code: 1)
--  While building custom Setup.hs for package realsense-haskell-0.1.0.0 using:
/home/ryselis/.stack/setup-exe-cache/x86_64-linux/Cabal-simple_mPHDZzAJ_2.0.1.0_ghc-8.2.2 --builddir=.stack-work/dist/x86_64-linux/Cabal-2.0.1.0 build lib:realsense-haskell exe:realsense-haskell-exe --ghc-options " -ddump-hi -ddump-to-file"Process exited with code: ExitFailure 1

Используемая мной сторонняя библиотека librealsense, Поскольку интеграция Haskell с C ++ является сложной, я решил создать оболочку C для этой библиотеки. В качестве минимального примера я попробовал это: я создал проект CMake. Заголовочный файл без директив компилятора выглядит следующим образом:

extern "C" {
void autoConfigurePersonTracking();
};

.Cpp файл содержит включает в себя librealsense и определяет функцию autoConfigurePersonTracking,

В моем проекте на Haskell мой стек package.yaml содержит этот раздел:

executables:
realsense-haskell-exe:
main:                Main.hs
source-dirs:         app
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
dependencies:
- realsense-haskell
extra-include-dirs:
- /home/ryselis/CLionProjects/realsense_c_wrapper/
extra-lib-dirs:
- /usr/local/lib/
- /home/ryselis/CLionProjects/realsense_c_wrapper/
extra-libraries:
- realsense
- realsense_c_wrapper

realsense_c_wrapper это имя моей статической оболочки C В моем коде на Haskell я использую inline-c-cpp библиотека и определите эту функцию:

autoConfigurePersonTracking :: IO ()
autoConfigurePersonTracking = [C.block| void {
autoConfigurePersonTracking();
}|]

Тем не менее, связанный сбой с исключением, приведенным выше.

Заголовок моей статической библиотеки находится по адресу /home/ryselis/CLionProjects/realsense_c_wrapper/ и сама библиотека находится на /usr/local/lib/librealsense_c_wrapper.a, librealsense находится в том же каталоге и ссылки просто отлично.

Что мне не хватает?

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]