0

私はスタンフォードオンラインでcs107を監査していました

私が遭遇した問題は割り当て 6 にあります。ターミナルで「make」と入力すると、エラー メッセージが表示されます。基本的に、コンパイル済みの .lib ファイルから取得できると思われる 2 つのヘッダー ファイルがありません。しかし、どういうわけかそれはうまくいきません。

元のメイク ファイルの一部を次に示します。

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」をコメントアウトすると、問題なくコンパイルされます。

4

2 に答える 2

1

のようなクラス固有のヘッダーファイルはthread_107.h/usr/class/cs107/include/インストラクターが生徒に使用することを期待しているマシンにあります。そのマシンを使用していない場合は、それらのインクルードファイルをコピーするか、独自に作成する必要があります。

このexpat.hファイルはオープンソースライブラリからのものです。コンパイルするシステムに適切なパッケージをインストールする必要があります。Ubuntuの場合はそうですsudo apt-get install libexpat1-devが、パッケージ名は他のディストリビューションでも同様である必要があります。

于 2012-08-12T20:10:39.530 に答える
1

これは、プロジェクトをコンパイルする手順です。

  1. ファイルassn-6-rss-news-search/thread_107.hを作成し、これを中に入れます:

    /* Empty header file */

  2. ライブラリlibrssnews.aを からassn-6-rss-news-search-lib/linux/コピーします。assn-6-rss-news-search/

  3. 109行目の関数 : への呼び出しをコメント化して、ファイルrss-news-search.cを変更します。InitThreadPackage

    //InitThreadPackage(false);

  4. を変更して、現在のディレクトリへのパスMakefileを含めます(以前にコピーしたライブラリにリンクできるようにするため)。librssnews.a

27行目は次のようになります。

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 を編集して27$(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)
于 2012-08-12T20:55:14.470 に答える