我想设置一个项目来获取我的.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”位于“ForeignExportCost.a”库中,我使用ghc编译,如下所示:
ghc -no-hs-main -fPIC -c ForeignExportCost.hs
ghc -no-hs-main -shared ForeignExportCost.o -o ForeignExportCost.a
我错过了什么或做错了什么?
答案 0 :(得分:2)
呃 - 看起来我的问题的答案是detailed here,告诉我如何痛苦地为我的项目添加大量的.a。 this blog post提供了一些有用的提示,让您顺利上路。
虽然如果有人告诉我“嘿等待,那么比迭代地找出失败的deps更容易”,这将是非常棒的。因为我想多次重复使用这个框架,这是让事情顺利进行的一种真正的痛苦!