Попытка привязки C ++ к Haskell: получение неопределенных ошибок ссылок

Я пытаюсь привязать C ++ в Haskell и сталкиваюсь с ошибками «неопределенная ссылка» при вызове привязки.

Я сделал небольшой проект (http://github.com/deech/CPlusPlusBindings) чтобы проиллюстрировать проблему. Он включает в себя небольшой класс C ++, оболочку C, сценарий тестирования C, привязку Haskell и сценарий тестирования. Сценарий тестирования C работает, Haskell дает мне:

  [1 of 1] Compiling Binding          ( dist/build/Binding.hs, dist/build/Binding.o )

src/Binding.chs:6:26: Warning: Defined but not used: `res'
In-place registering CPlusPlusBinding-0.1.0.0...
Preprocessing executable 'binding_test' for CPlusPlusBinding-0.1.0.0...
[1 of 1] Compiling Main             ( src/BindingTest.hs, dist/build/binding_    /binding_test-tmp/Main.o )

src/BindingTest.hs:3:1: Warning:
Top-level binding with no type signature: main :: IO ()
Linking dist/build/binding_test/binding_test ...
../CPlusPlusBinding/c-src/libA_C.a(A_C.o): In function      `A_static_function':

../CPlusPlusBinding/c-src/A_C.cpp:4:0:
undefined reference to `A::static_function()'
../CPlusPlusBinding/c-src/libA_C.a(A_C.o): In function `A_member_function':

../CPlusPlusBinding/c-src/A_C.cpp:7:0:
undefined reference to `A::member_function()'
../CPlusPlusBinding/c-src/libA_C.a(A_C.o): In function `A_new':

../CPlusPlusBinding/c-src/A_C.cpp:10:0:
undefined reference to `operator new(unsigned long)'
collect2: error: ld returned 1 exit status

Бег cabal configure, а также cabal build скомпилирует привязки C ++ и C и воспроизведет ошибку.

Обновить

Я решил проблему, как указано в комментарии ниже. Похоже, я не могу ответить на свой вопрос.

2

Решение

Community-Wiki ответ для дальнейшего использования. Решением было изменить порядок представления библиотек компоновщику, изменив файл cabal следующим образом.

include-dirs: ./c-src
ghc-options: -Wall -threaded -lHSCPlusPlusBinding-0.1.0.0 -lA_C -lA -lstdc++
1

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

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

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