2012-08-12 24 views
0

我在斯坦福大學的在線審計CS107CS107任務文件無法編譯,缺少expat.h和thread_107.h文件

我跑進是分配6的問題,當我在終端輸入「make」,彈出錯誤消息。基本上,我想念兩個頭文件,我猜可以從預編譯的.lib文件中得到。但不知何故,它不起作用。

這裏的原件製作文件的一部分:

CFLAGS = -D_REENTRANT -g -Wall -D__ostype_is_$(OSTYPE)__ -std=gnu99 -I/usr/class/cs107/include/ -Wno-unused-function $(DFLAG) 
LDFLAGS = -L/usr/class/cs107/assignments/assn-6-rss-news-search-lib/$(OSTYPE) -L/usr/class/cs107/lib -lexpat -lrssnews $(PLATFORM_LIBS) $(THREAD_LIBS) 
PFLAGS= -linker=/usr/pubsw/bin/ld -best-effort -threads=yes -max-threads=1000 

編輯:

當我說:「這應該編譯即使沒有線程實現」,我的意思是它應該編譯沒有進一步線程實現由學生。

所以這裏的用線的錯誤消息:

gcc -D_REENTRANT -g -Wall -D__ostype_is_linux__ -std=gnu99 -I/usr/class/cs107/include/ -Wno-unused-function -c -o rss-news-search.o rss-news-search.c 
rss-news-search.c: In function ‘main’: 
rss-news-search.c:109:3: warning: implicit declaration of function ‘InitThreadPackage’ [-Wimplicit-function-declaration] 
gcc rss-news-search.o -D_REENTRANT -g -Wall -D__ostype_is_linux__ -std=gnu99 -I/usr/class/cs107/include/ -Wno-unused-function -L/home/h/cs107/assn-6-rss-news-search-lib/linux -L/usr/class/cs107/lib -L. -lexpat -lrssnews -lnsl -lpthread -lthread_107_linux -o rss-news-search 
/usr/bin/ld: cannot find -lthread_107_linux 
collect2: ld returned 1 exit status 
make: *** [rss-news-search] Error 1 

這裏的無$錯誤消息(THREAD_LIBS):

gcc -D_REENTRANT -g -Wall -D__ostype_is_linux__ -std=gnu99 -I/usr/class/cs107/include/ -Wno-unused-function -c -o rss-news-search.o rss-news-search.c 
rss-news-search.c: In function ‘main’: 
rss-news-search.c:109:3: warning: implicit declaration of function ‘InitThreadPackage’ [-Wimplicit-function-declaration] 
gcc rss-news-search.o -D_REENTRANT -g -Wall -D__ostype_is_linux__ -std=gnu99 -I/usr/class/cs107/include/ -Wno-unused-function -L/home/h/cs107/assn-6-rss-news-search-lib/linux -L/usr/class/cs107/lib -L. -lexpat -lrssnews -lnsl -lpthread -o rss-news-search 
rss-news-search.o: In function `main': 
/home/h/cs107/assn-6-rss-news-search/rss-news-search.c:109: undefined reference to `InitThreadPackage' 
collect2: ld returned 1 exit status 
make: *** [rss-news-search] Error 1 

在後一種情況下,如果我註釋掉 「InitThreadPackage」,它編譯得很好。

+1

後生成文件,或一些鏈接分配資源。我們沒有足夠的信息來幫助您。 – TOC 2012-08-12 20:10:17

+0

嗨,感謝您的評論。分配文件可以在這裏找到http://see.stanford.edu/see/materials/icsppcs107/assignments.aspx其中包括一個make文件。它的作業6. – user1105360 2012-08-12 20:19:17

+0

感謝和鏈接是這樣的:http://see.stanford.edu/materials/icsppcs107/assn-6-rss-news-search.zip? – TOC 2012-08-12 20:22:33

回答

1

這是編譯項目的過程:從assn-6-rss-news-search-lib/linux/assn-6-rss-news-search/

/* Empty header file */

  • 複製librssnews.a

    1. 創建一個文件assn-6-rss-news-search/thread_107.h,並把這個內部

    2. 線:0
    3. 通過註釋調用該函數修改文件rss-news-search.c

      // InitThreadPackage(假);

    4. 修改Makefile以包括路徑到當前目錄(能夠鏈接到你之前複製librssnews.a庫):

    線應該像這樣的:

    LDFLAGS = -L/usr/class/cs107/assignments/assn-6-rss-news-search-lib/$(OSTYPE) -L/usr/class/cs107/lib -L. -lexpat -lrssnews $(PLATFORM_LIBS) $(THREAD_LIBS) 
    

    然後:

    make clean 
    make 
    

    編輯:

    當你得到這個錯誤cannot find lthread_107_linux,編輯你的Makefile就行刪除此$(THREAD_LIBS)

    LDFLAGS = -L/usr/class/cs107/assignments/assn-6-rss-news-search-lib/$(OSTYPE) -L/usr/class/cs107/lib -L. -lexpat -lrssnews $(PLATFORM_LIBS) 
    
  • +0

    現在它提示「找不到lexpat」和「找不到lthread_107_linux」。 – user1105360 2012-08-12 22:33:31

    +0

    正如Karl所說,如果你在Ubuntu上安裝libexpat(sudo apt-get install libexpat1-dev) – TOC 2012-08-12 22:38:21

    +0

    對於其他錯誤我會編輯我的答案 – TOC 2012-08-12 22:41:13

    1

    類別特定的頭文件,例如thread_107.h可在/usr/class/cs107/include/中找到,無論教師希望學生使用何種機器。如果您不使用該機器,則必須複製這些包含文件或製作自己的文件。

    expat.h文件來自於一個開源庫。您需要在正在編譯的系統上安裝相應的軟件包。在Ubuntu上,這是sudo apt-get install libexpat1-dev,但軟件包名稱在其他發行版上應該相似。

    +0

    謝謝!卡爾。我想我可以得到expat.h。但是,我如何創建自己的thread_107.h?對不起,我對CS還是個新手。 – user1105360 2012-08-12 20:16:34

    +0

    您只需製作一個具有該名稱的文件,當編譯器抱怨未知函數時,就在其中放入匹配的函數聲明。 – 2012-08-12 20:23:07

    +0

    太棒了!我試試看! – user1105360 2012-08-12 20:25:38