我想在ghci会话中导入一些inline-c
生成的函数。所有源文件和目标文件都在src/
子文件夹中,但我收到导入错误:
src/Main.hs:3:8:
Could not find module ‘Test1’
我包含所有文件以供参考。提前致谢
Main.hs
module Main where
import Test1
main =
test1
以及要导入的功能
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
module Test1 where
import qualified Language.C.Inline as C
import Foreign.C.Types
C.include "<stdio.h>"
C.include "<math.h>"
test1 = do
s <- readAndSum n
[C.exp| void{ printf( "Sum: %.2d\n", $(int s)) } |]
putStrLn $ "Sum: " ++ show s
readAndSum n =
[C.block| int {
int i, sum = 0, tmp;
for (i = 0; i < $(int n); i++) {
scanf("%d ", &tmp);
sum += tmp;
}
return sum;
} |]
生成文件:
main:
ghc -c src/Test1.hs
cc -c src/Test1.c -o src/Test1_c.o
ghci src/Main.hs src/Test1_c.o -isrc/
# ghci src/Main.hs -Lsrc/
更新:我已经修复了makefile,现在编译了。然而,下一个重要问题是如何在每次调用中隔离效果,即以一致的方式重置值。
答案 0 :(得分:0)
ghci
调用的最小更改完成了这项工作:
ghci src/Main.hs src/Test1_c.o -isrc/
这意味着我们添加一个带有-i
标志的包含路径来修复Could not find module
错误,并明确链接从inline-c
代码段生成的目标文件。