0

私は、すべてのプログラミング例を実行して、Head First C に取り組んでいます。第 8 章は静的リンクから始まります。次の 4 つのコマンド (Cygwin) を使用します。

gcc -I./includes -c hfcal.c -o hfcal.o
gcc -I./includes -c elliptical.c -o elliptical.o
ar -rcs ./libs/libhfcal.a hfcal.o
gcc  elliptical.o -L./libs -lhfcal -o elliptical

正しく入力したと仮定すると、エリプティカル マシンで消費されたカロリーを示す数行が出力されます。

次に、動的リンクを紹介します。それは本の中で最も明確な章ではなく、私はまだ少しあいまいです. さらに複雑なのは、新しいコードにタイプミスがあるかどうかわからないという事実です。テキストは、コードが以前と同じであると述べていますが、スラッシュの前のドットを省略し、1 つのケースではインクルードの末尾の s を省略しています。ドットを元に戻し、変更する必要があると言った部分だけを変更しました。(私は彼らの正誤表ページに行きましたが、関連するものは何もありませんでした。) 新しいコードは次のとおりです。

gcc -I./includes -fPIC -c hfcal.c -o hfcal.o //Got a warning, fPIC ignored, as book predicted
gcc -shared hfcal.o -o ./libs/libhfcal.dll
gcc -I./includes -c elliptical.c -o elliptical.o
gcc  elliptical.o -L./libs -lhfcal -o elliptical

無視され-fPICた行と 2 行目を除いて、これらは最初のケースと同じコマンドですが、順序が少し異なります。

./elliptical を正常に実行した後、実際に別のディレクトリを使用することになっていたのか、ドットが抜けているのは意図的なものなのか疑問に思いました。アーカイブ .a ファイルを rm したことはなく、新しい dll ファイルと同じディレクトリにありました。libhfcal.a と libhfcal.dll のどちらを使用するか、コンパイラーはどのように判断するのでしょうか。順番のせい?

より明確な説明、特に試すことができるコードを読むことができる良いリソースはありますか?

4

1 に答える 1

0

ドットの欠落とsはタイプミスだと思います。それ以外の場合は、システムのルートに、必要なヘッダー ファイルを含むインクルード ディレクトリとインクルード ディレクトリが必要なります。

私が知る限り、それは本の他の場所で指定されていないので、あまり意味がありません.

しかし、動的リンクを試すときは、静的リンクの場合に作成したアーカイブ./libs/libhfcal.aを削除し、3 行目を次のように変更する必要があると思います。

gcc -shared hfcal.o -o ./libs/libhfcal.dll

に:

gcc -shared hfcal.o -o ./libs/libhfcal.dll.a

于 2013-09-21T14:16:54.707 に答える