gpt4 book ai didi

c - 堆栈如何使用外部函数接口(interface) (FFI)?

转载 作者:行者123 更新时间:2023-12-02 09:16:42 26 4
gpt4 key购买 nike

我正在关注一些 FFI 教程和示例( herehere ),我想知道使用堆栈时应该改变什么?

在示例中,源 C 文件使用 gcc -c -o termops.o termops.c 编译为目标文件。并使用 ghc --make -main-is FfiEx -o ffi_ex FfiEx.hs termops.o 包含在 gcc 编译中.使用堆栈如何实现等效?

最佳答案

这是我能想象到的最小的 FFI C 项目。

$ cd c-proj
c-proj$ ls
Main.hs c-proj.cabal c_file.c

这些文件的内容:
  • c-proj.cabal : 描述
    name:            c-proj
    version: 0.1.0.0
    cabal-version: >= 1.22
    build-type: Simple

    executable main
    main-is: Main.hs
    build-depends: base >= 4.9
    c-sources: c_file.c
  • Main.hs :唯一的 Haskell 源文件
    {-# LANGUAGE ForeignFunctionInterface #-}

    module Main where

    foreign import ccall "plus_ten" plusTen :: Int -> IO Int

    main = do
    n <- plusTen 2
    print n
  • c_file.c : C 源文件
    #include<stdio.h>

    int plus_ten(int n) {
    printf("%d + 10\n", n);
    return n + 10;
    }

  • 然后,如果你想使用 Stack,你可以运行 stack init .
    $ stack init
    << Shell output snipped >>
    $ stack build
    << Shell output snipped >>
    $ stack exec main
    2 + 10
    12

    关于c - 堆栈如何使用外部函数接口(interface) (FFI)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46576861/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com