正在尝试将C++绑定到Haskell:获取未定义的引用错误
Attempting a C++ binding to Haskell: getting undefined reference errors
我正在Haskell中尝试C++绑定,在调用绑定时遇到"未定义引用"错误。
我做了一个小项目(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绑定并重现错误。
更新
我已经解决了下面评论中列出的问题。不过,我似乎无法回答自己的问题。
社区wiki答案以供将来参考。解决方案是通过这样更改cabal文件来更改库向链接器显示的顺序
include-dirs: ./c-src
ghc-options: -Wall -threaded -lHSCPlusPlusBinding-0.1.0.0 -lA_C -lA -lstdc++
相关文章:
- 获取对function_name的未定义引用
- 为不应该获得未定义行为的内容获取未定义的行为
- Armadillo正在为共享的lapack库获取未定义的参考
- 获取未定义的符号:尝试使用Clang地址清理器时__asan_memset
- 获取作为类变量的 Deque 大小时未定义的行为
- 获取线函数未定义错误。无法在字符串中保存可验证的内容
- 获取未初始化对象成员的地址是否定义良好?
- C++程序调用 C 函数 在 g++ 链接期间获取未定义的引用
- 尝试编写进程内存并获取用户定义的文字运算符未找到
- 获取错误:未定义对函数 Android NDK 的引用
- 获取数组/向量末尾地址的未定义行为
- 在 C++ 年的 iostream 中未定义的获取线
- wxWidget获取许多未定义的引用
- 在给定的代码中获取错误(标识符未定义)
- 获取函数运算符<未定义的引用
- 错误:标识符类名未定义?为我在文件中创建的所有类获取此内容
- C++ 获取未定义的符号错误
- 正在尝试将C++绑定到Haskell:获取未定义的引用错误
- 获取未定义的引用错误
- 静态结构成员获取"未定义的引用"。不知道为什么