c++ - 尝试将 C++ 绑定(bind)到 Haskell : getting undefined reference errors

标签 c++ c haskell cabal ffi

我正在尝试在 Haskell 中进行 C++ 绑定(bind),但在调用绑定(bind)时遇到“ undefined reference ”错误。

我做了一个小项目 ( http://github.com/deech/CPlusPlusBindings ) 来说明这个问题。它包括一个小的 C++ 类、一个 C 包装器、一个 C 测试脚本以及一个 Haskell 绑定(bind)和一个测试脚本。 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 configurecabal build 将编译 C++ 和 C 绑定(bind)并重现错误。

更新

我已经解决了下面评论中概述的问题。不过,我似乎无法回答我自己的问题。

最佳答案

community-wiki 答案供将来引用。解决方案是通过像这样更改 cabal 文件来更改库呈现给链接器的顺序。

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

关于c++ - 尝试将 C++ 绑定(bind)到 Haskell : getting undefined reference errors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18562881/

相关文章:

转换文件中的文本

c - 使用 valgrind 在 strstr() 中读取大小 1 无效

haskell - 在 Haskell 中为状态创建只读函数

c - 它是如何制作从 poweron 到用户界面的 digicoder vcr dvd 播放器图形用户界面的?

c++ - 一个奇怪的 C++ 错误,可能是相对于 long long 类型

c++ - 有什么方法可以判断我的代码是否是用 cl.exe 编译的?

c++ - 如何为模板嵌套类编写可交换的重载算术运算符?

haskell - GHC 未定义对依赖路径的引用

algorithm - 运算符下计算闭包的高效函数算法

c++ - 如何将二进制文件内容读取为字符串?