2015-06-07 53 views
1

我想在ghci會話中導入一些inline-c生成的函數。所有的源文件和目標文件是在一個src/子文件夾,但我得到導入錯誤:在ghci中導入inline-c模塊

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

ghci調用的最小變化做了工作:

ghci src/Main.hs src/Test1_c.o -isrc/ 

這意味着我們增加一個包含路徑與-i標誌修復Could not find module錯誤,並明確鏈接從inline-c產生的目標文件片段。