2014-03-27 39 views
2

我正在學習如何從庫使C++調用Haskell代碼,我是從以下FFI完整的例子http://www.haskell.org/haskellwiki/FFI_complete_examplesGHC 7.6.3不產生_stub.c和_stub.o

然而指令,

ghc -v Foo.hs 

只有Foo_stub.hFoo.o被創建,沒有Foo_stub.cFoo_stub.o。根據Calling Haskell from C,ghc> 7.2不再生成_stub.o

在這種情況下,我仍然需要一個stub.o來鏈接一個可執行文件使用g ++

目前後

g++ -o test Foo.o test.o `cat link_options` 

,我有很多不確定的符號錯誤的hs_init等。是否因爲_stub.o不存在或其他缺失?

我可以用GHC正確鏈接它們:

ghc -no-hs-main -o test test.o Foo.o -lstdc++ 

(閱讀這個問題後:Building a dynamic library with haskell and using it from C++

但我不知道是不是仍然可以使用克至鏈接++?

回答

1

你正在看一個過時的例子(它使用ghc 6.12.3)。此示例爲7.6.3:

http://www.haskell.org/haskellwiki/GHC/Using_the_FFI

+0

我見過一個,但隻字不提如何使用G ++鏈接,請讓我知道如果我錯過了什麼。 – swang

+0

引用GNU.org:引用C++編譯時,通常會調用編譯器「G ++」。由於只有一個編譯器,無論語言環境如何,將其稱爲「GCC」也是準確的;然而,當強調編譯C++程序時,術語「G ++」更有用。 http://gcc.gnu.org/onlinedocs/gcc-3.3.6/gcc/G_002b_002b-and-GCC.html –

+0

感謝您的評論......但它如何回答我的問題?如果沒有stub.o,如何使用g ++/gcc鏈接目標,如使用ghc 6編譯時可以完成的那樣? – swang