Заголовки hsc2hs C++

Я пытаюсь построить исполняемый файл Haskell с FFI против некоторых источников C++.

У меня есть заголовок C (cstuff/foo.h), как это:

#ifndef _FOO_H_
#define _FOO_H_

#include <somecppheader.c> // Some header outside of my control with C++ constructs

void foo();

#endif

Реализация foo не должна иметь значения. Он что-то делает и использует что-то объявленное в somecppheader.h.

Исполняемый раздел в файле Cabal выглядит следующим образом:

executable botprog
  main-is:             Main.hsc
  other-extensions:    ForeignFunctionInterface
  build-depends:       base >=4.7 && <4.8
  build-tools:         hsc2hs
  default-language:    Haskell2010
  include-dirs:        cstuff
  c-sources:           cstuff/foo.cpp
  pkgconfig-depends:   somelib -- The one that contains somecppheader.h

Main.hsc выглядит примерно так:

{-# LANGUAGE ForeignFunctionInterface #-}

#include <foo.h>
foreign import ccall "foo.h foo" :: IO ()

main = foo >> putStrLn "Called foo."

hsc2hs на самом деле не нужен в этом примере, он просто используется, чтобы вызвать ошибку, которую я пытаюсь описать.

Проблема в том, что somecppheader.h - это заголовок C++ со специфическими для C++ конструкциями, а включение файла foo.h, похоже, компилирует его как заголовок C, что не удается из-за конструкций C++, таких как определения классов.

Как я могу сказать hsc2hs или Cabal, что foo.h должен быть скомпилирован с g ++, а не с gcc?

0 ответов

Другие вопросы по тегам