1

走る代わりにどうしたらいいのか知りたい

gcc -std=c99 foo.c -o foo -lcs50

私はただ走ることができます

make foo

make問題は、コマンドだけで試してみると、

cc     foo.c   -o foo
Undefined symbols for architecture x86_64:
  "_GetString", referenced from:
      _main in crypto-6PNyQP.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [crypto] Error 1

しかし、gccコマンドの使用に他のフラグを含めると、問題なく機能します。私はオンラインクラスを受講していますが、入力するだけでmake foo出力は次のようになります。

jharvard@appliance (~/Desktop): make foo
gcc -ggdb -std=c99 -Wall -Werror    foo.c  -lcrypt -lcs50 -lm -o foo
jharvard@appliance (~/Desktop):

私はしばらくの間グーグルを検索してこの質問への答えを見つけようとしましたが、それでも運がありません。

4

2 に答える 2

2

GNUの使用make

make CFLAGS=-std=c99 LDLIBS=-lcs50 foo

または、これらのマクロを2行にまとめますmakefile

CFLAGS = -std=c99
LDLIBS = -lcs50

最後の例で示したより複雑なオプションの場合:

CFLAGS = -ggdb -std=c99 -Wall -Werror
LDLIBS = -lcrypt -lcs50 -lm

このようにすると、次のコマンドを使用して、単一のソースファイルからmakefile任意のプログラムをビルドできます。xyzxyz.c

make xyz

複数のソースファイルからプログラムを作成する必要がある場合は、より複雑なものが必要になりますmakefile

于 2012-10-20T22:34:24.100 に答える
0

CS50アプライアンスの構成に関する質問への回答を専門とするディスカッション掲示板(Googleグループから参加可能)があります。これは、ハーバードのCS50をオンラインで使用しているため実行していると思います。

ボックス内のCS50(アプライアンス)は、makeと入力すると、最初のいくつかの宿題の割り当て中に「正しい」ことが行われるように構成する必要があります。これにより、コンパイルの詳細についてすぐに心配する必要がなくなります。

ただし、機能していないように思われる場合は、上記のグループ「cs50-discuss」に質問を投稿できます。アプライアンスの代わりに独自のセットアップを(不注意に)使用している場合は、実行時にプログラム「make」によって読み取られるテキストファイルである「Makefile」の作成方法を検索するだけで済みます。Makefileを使用すると、「make」を呼び出したときに、実行するコマンドが正しく呼び出されるようになります。

于 2012-10-20T22:28:37.330 に答える