7

ハーバード大学のオープンコースウェア コースで C ライブラリを使用しようとしています。外部ライブラリをセットアップするためのインストラクターの指示は、ここにあります。

ubuntuボックスでこのlibを使用しようとしているので、ubuntu固有の指示に従っています。ページの指示に従ってセットアップしましたがhelloWorld.c、cs50 ライブラリ関数を使用して簡単なプログラムを実行すると、gcc がうまく動作しません。

例:

helloWorld.c

#include <stdio.h>
#include <cs50.h>

int
main(void){
        printf("What do you want to say to the world?\n");
        string message = GetString();
        printf("%s!\n\n", message);
}

$ gcc helloWorld.c

/tmp/ccYilBgA.o: In function `main':
helloWorld.c:(.text+0x16): undefined reference to `GetString'
collect2: ld returned 1 exit status

指示に記載されているように、手紙の指示に従いましたが、うまくいきませんでした。私はubuntu 12.04を実行しています。私の問題をさらに明確にすることができるかどうか教えてください。

4

6 に答える 6

34

まず、初心者として、すべての警告とデバッグ情報を有効にしてコンパイルするように常に GCC に依頼する必要がありますgcc -Wall -g。しかし、いつか呼び出す方法をgcc読んでください。優れたソース コード エディター( GNU emacsvimgeditなど) を使用して C ソース コードを編集しますが、コマンド ラインでプログラムをコンパイルできるようにしてください (常に高度なIDE隠蔽を使用しないでください)。あなたからの重要な編集の詳細)。

次に、ハーバード固有のライブラリが欠落している可能性があります。いくつかのオプションの-L後にライブラリディレクトリが続き-l、ライブラリ名に接着されています。したがって、(適切な名前gcc -Wall -g -lcs50に置き換えて)必要になる場合があり、いくつかのディレクトリが必要になる場合がありますcs50-L

へのプログラム引数の順序gccが重要であることに注意してください。原則として、 ifaによって異なりますが、前にb置く必要があります ; より具体的に私は提案しますab

  1. gccプログラム名から始めます。必要に応じてC標準レベルを追加します。-std=c99
  2. コンパイラの警告、デバッグ (または最適化) オプションを追加します (さらに多くの警告を取得するため-Wall -gに追加することもできます)。-Wextra
  3. プリプロセッサの定義を配置し、ディレクトリを含めます-DONE=1-Imy-include-dir/
  4. Cソースファイルを置きますhello.c
  5. リンクしているオブジェクトファイルを配置します。bar.o
  6. -Lmy-lib-dir/関連する場合はライブラリディレクトリを配置します
  7. ライブラリ名-laa-lbb( が にlibaa.so依存している場合libbb.soは、この順序で)
  8. で終わり-o your-program-name、生成されたバイナリの名前を指定します。デフォルトの名前を使用しないでくださいa.out

オプションを指定するディレクトリ-I(プリプロセッサ インクルードの場合) と-Lライブラリの場合は、複数回指定できます。順序は重要です (検索順序)。

非常にすぐに、 GNUのようなビルド自動化ツールを使用したくなるでしょう(おそらくLinuxの助けを借りて)makeremake

デバッガの使い方gdbも学びます。

常にコンパイラに警告を求める習慣を身につけ、警告がなくなるまで常にプログラムを改善してください。コンパイラはあなたの味方であり、あなたを助けてくれます!

小さなプログラムと有名なSICPをデバッグする方法もお読みください(非常に重要な概念を教えています。読みながらLinuxで使用することをお勧めします。詳細については、 guilehttp://norvig.com/21-days.htmlを参照してください)。valgrindなどのツールにも注意してください

楽しむ。

于 2012-07-28T05:19:59.510 に答える
3

コンパイル中にライブラリに対してリンクする必要があります。Ubuntu を使用している場合、ライブラリは .a または .so で終わる必要があります。ライブラリに対してリンクするには:

gcc -o myProgram myProgram.c -l(library name goes here but no parentheses)
于 2012-07-28T05:19:03.300 に答える
2

ライブラリにリンクする必要がありますが、GCC はどのライブラリを使用したいのかを知っているのでしょうか?

gcc helloWorld.c -lcs50
于 2012-07-28T05:20:32.130 に答える
2
  1. http://mirror.cs50.net/library50/c/library50-c-5.zipから cs50 をダウンロードします。
  2. それを抽出します。(cs50.c と cs50.h の 2 つのファイルが得られます)
  3. 両方のファイルを既定のライブラリ フォルダーにコピーします。(これには stdio.h ファイルが含まれます)
  4. プログラムを作成する際に、次のように使用します: #include < cs50.c >
  5. helloWorld.c ファイルを含むフォルダーにファイルをコピーすることもできます。
  6. #include " cs50.c " を使用する必要があります。

または =============================================== ====================>

  1. cs50.c および cs50.h ファイルをテキスト エディターで開きます。
  2. cs50.h の #include < stdlib.h > のすぐ下に #include < stdio.h > と #include < string.h > の両方を新しい行に追加します。
  3. cs50.c ファイルを開き、すべてをコピーし (from: /**Reads a line of text from standard input and returns {from line 47 to last})、それを cs50.h の #endif のすぐ上に貼り付けて保存します。ファイル。
  4. これで、ファイル cs50.h をデフォルトのライブラリ フォルダーまたは現在の作業フォルダーにコピーできます。
  5. ファイルをデフォルト フォルダにコピーした場合は #include < cs50.h > を使用し、ファイルを現在の作業フォルダにコピーした場合は #include " cs50.h " を使用します。

助けが必要な場合は、faizan4427@gmail.com で私に尋ねることができます。うまくいった場合は投票してください。

ではごきげんよう!!!

于 2016-03-26T13:49:02.403 に答える