Как я могу скомпилировать и использовать Haskell в качестве библиотеки C, используя компилятор Xcode LLVM? - PullRequest
2 голосов
/ 19 апреля 2011

Я хочу настроить проект на использование моего кода .hs и моей основной программы .c и получить статически связанный исполняемый файл с использованием компилятора LLVM. Я могу заставить вещи работать с помощью параметров командной строки ghc для создания .hs, создания заглушек, компиляции и связывания приложения драйвера, используя полностью ghc. Тем не менее, я получаю различные проблемы в Xcode.

Моя первая проблема заключалась в том, что мне, конечно, нужно использовать 32-битную среду компиляции в XCode. Это решило, мне пришлось возиться с путями, чтобы явно включить 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

Что я пропускаю или делаю неправильно?

1 Ответ

2 голосов
/ 19 апреля 2011

Тьфу - похоже, что ответ на мой вопрос подробно здесь , рассказывающий мне, как мучительно добавить тонну .a в мой проект.И это сообщение в блоге дало несколько полезных советов по пути.

Хотя, если кто-то скажет мне: "Эй, подождите, есть более простой способ, чем повторное определение неудачных операций", который был бы потрясающим,Потому что я хочу многократно использовать этот фреймворк, и это настоящая боль в способе начать работу!

...