2013-08-06 36 views
1

要將hello.spl翻譯爲C,我運行的是./spl2c <hello.spl> hello.c,它工作正常。莎士比亞編程語言 - 編譯時出錯

接下來,我跑gcc hello.c,但我得到這個錯誤:

fatal error: spl.h: No such file or directory .

spl.hhello.c在同一個目錄下。我試圖從#include <spl.h>hello.c包含語句更改爲#include "spl.h",後來我跑gcc hello.c比如當獲得幾個錯誤:

undefined reference to 'global_initialize'

undefined reference to 'initialize_character'

誰能告訴我這是怎麼回事?

回答

2

函數global_initilize,initialize_character是聲明的,但沒有在hello.c中定義。我認爲你的程序hello.c取決於一個庫(「spl」庫?),它不包含在你的編譯命令中。

您應具備以下之一:

gcc hello.c whatever_file_who_define_undefined_function.c 
gcc hello.c -lwhatever_lib_that_define_undefined_function.so 

編輯:

http://shakespearelang.sourceforge.net/report/shakespeare/#SECTION00070000000000000000 你需要包括libspl.a庫,使其工作

所以你的編譯選項應如下:

gcc hello.c -Ipath/to/spl/include/ -Lpath/to/spl/library -llibspl.a 
  • -I選項來指定您的spl.h文件位於
  • -L選項來指定您的libspl.a位於
  • -l選項來指定要使用

或(其中庫* .a是靜態庫,因此它可以像對象文件一樣處理)

gcc hello.c -Ipath/to/spl/include/ path/to/spl/library/libspl.a 
+0

這是我輸入的命令,但出現錯誤「ld:找不到-llibspl.a的庫」 – Skyler

+0

明白了。我所要做的就是運行spl2c,然後將hello.c文件中的include語句改爲包含「spl.h」(IN QUOTES,NOT ANGLE BRACKETS)。然後我運行了gcc hello.c libspl.a,最後是./a.out。 – Skyler

+0

其實,我沒有得到包含''spl.h「'或''的問題。當你執行'<...>'時,它首先查看系統頭文件(如stdio.h等),如果找不到本地頭文件的編譯查找。應該沒有問題,特別是如果指定'-I'選項... – Phong