2

我想建立一个项目来获取我的 .hs 代码和我的主 .c 程序,并通过使用 LLVM 编译器生成一个静态链接的可执行文件。我可以通过 ghc 命令行选项来构建 .hs,生成存根,并完全使用 ghc 编译和链接驱动程序应用程序。但是,我在 Xcode 中遇到了各种问题。

我的第一个问题是我当然需要在 Xcode 中使用 32 位编译环境。解决了,我不得不摆弄明确包含 HsFFI.h 的路径。解决了,我得到一个链接器错误:

Ld "build/Debug/FFI Test.app/Contents/MacOS/FFI Test" normal i386
    cd "/Users/rcl/TestXCodeProjects/FFI Test"
    setenv MACOSX_DEPLOYMENT_TARGET 10.6
    /Developer/usr/bin/clang -arch i386
        -isysroot /Developer/SDKs/MacOSX10.6.sdk
        "-L/Users/rcl/TestXCodeProjects/FFI Test/build/Debug"
        "-L/Users/rcl/TestXCodeProjects/FFI Test/FFI Test"
        "-F/Users/rcl/TestXCodeProjects/FFI Test/build/Debug"
        -filelist "/Users/rcl/TestXCodeProjects/FFI Test/build/FFI Test.build/
            Debug/FFI Test.build/Objects-normal/i386/FFI Test.LinkFileList"
        -mmacosx-version-min=10.6 -framework Cocoa
        "/Users/rcl/TestXCodeProjects/FFI Test/FFI Test/ForeignExportCost.a"
        -o "/Users/rcl/TestXCodeProjects/FFI Test/build/Debug/FFI Test.app/
            Contents/MacOS/FFI Test"

Undefined symbols for architecture i386:
  "_hs_init", referenced from:
      -[FFI_TestAppDelegate applicationDidFinishLaunching:] in FFI_TestAppDelegate.o
  "_simpleFunction", referenced from:
      -[FFI_TestAppDelegate applicationDidFinishLaunching:] in FFI_TestAppDelegate.o
  "_hs_exit", referenced from:
      -[FFI_TestAppDelegate applicationDidFinishLaunching:] in FFI_TestAppDelegate.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

“simpleFunction”在我使用 ghc 编译的“ForeignExportCost.a”库中,如下所示:

ghc -no-hs-main -fPIC -c ForeignExportCost.hs
ghc -no-hs-main -shared ForeignExportCost.o -o ForeignExportCost.a

我错过了什么或做错了什么?

4

1 回答 1

2

呃 - 看起来我的问题的答案在这里很详细,告诉我如何痛苦地将大量 .a 添加到我的项目中。这篇博文提供了一些有用的提示,帮助您顺利上路。

虽然如果有人告诉我“嘿等等,有一种比迭代找出失败的部门更简单的方法”,那就太棒了。因为我想多次重用这个框架,这是一种让事情顺利进行的真正痛苦的方法!

于 2011-04-18T22:09:11.253 回答