Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> GCCコマンドラインの詳細

GCCコマンドラインの詳細

  

1、gcにはc /c ++コンパイラが含まれています。

gcc、cc、c ++、g ++、gccとccは同じ、c ++とg ++は同じ、一般的なcプログラムgccでコンパイルすると、c ++プログラムはg ++

2でコンパイルされます。gccの基本的な使い方

gcc test.cはg。accという名前のプログラムをコンパイルします。 testはtest -oパラメータという名前のプログラムをコンパイルしてジェネレータの名前を指定します。

3、なぜ 'xxxxx'エラーへの未定義の参照があるのでしょうか。

まず第一に、これはコンパイルエラーではなくリンクエラーです、つまり、このエラーしかない場合は、プログラムのソースコード自体に問題はないということですコンパイラでコンパイルする場合は正しくありません。たとえば、プログラムで数学関数を使用している場合にライブラリを使用するには、コンパイルコマンドラインに-lm

4を追加して、コンパイルパラメータで数学ライブラリにリンクするプログラムを指定する必要があります。 -lパラメータと-Lパラメータ

-lパラメータには、プログラムによってリンクされるライブラリを指定するために使用されます-lパラメータの後にライブラリ名が続きますライブラリ名と実際のライブラリファイル名の関係は何ですか?数学ライブラリを使用し、彼のライブラリ名はm、彼のライブラリファイル名はlibm.soです。ライブラリファイル名のヘッダーlibとtail.soが削除されているのは簡単です。

ライブラリ名の取得方法がわかったので、サードパーティから提供されているlibtest.soというライブラリ名を使用する必要がある場合は、libtest.soを/usr /libにコピーし、コンパイル時に-ltestパラメータを追加するだけです。 libtest.soライブラリを使用することができます(もちろん、libtest.soライブラリ内の関数を使用します。また、libtest.soに関連するヘッダーファイルも必要です)。

/libと/usr /libに配置します。 /usr /local /lib内のライブラリは-lパラメータで直接リンクできますが、ライブラリファイルがこれら3つのディレクトリには配置されていないが他のディレクトリに配置されている場合は、-lパラメータのみを使用します。エラーメッセージはおそらく、< /usr /bin /ld:-lxxx'が見つからない、すなわちリンカldが3つのディレクトリでlibxxx.soを見つけることができない、そして別のパラメータ - Lは/usr /X11R6 /libディレクトリにある、よく使われるX11ライブラリのように便利です。コンパイル時には-L /usr /X11R6 /lib -lX11パラメータを使う必要があります - Lパラメーターの後には、ライブラリー・ファイルが配置されているディレクトリーの名前が続きます。たとえば、libtest.soを/aaa /bbb /cccディレクトリに置いた場合、linkパラメータは-L /aaa /bbb /ccc -ltestとなります。 RH9は一例です、たとえば、libm.soは/lib/libm.so.x、/lib/libm.so.6にリンクし、/lib/libm-2.3.2.soにリンクします。 ldはlibxxxx.soしか見つけられないので、そのようなリンクはまだうまく行かないでしょう。したがって、xxx​​xライブラリを使いたいがlibxxxx.so.xまたはlibxxxx-xxxsoだけを使いたい場合は、ln -s libxxxx-へのリンクを張ることができます。 Xxxso libxxxx.so

手動でリンクパラメータを書くのはとても面倒ですが、幸いなことに、多くのライブラリ開発パッケージはリンクパラメータを生成するためのプログラムを提供しています。たとえば、ディレクトリ内の

gtk1.2のリンクパラメータジェネレータはgtk-configですgtk-config --libs" -L /usr /lib -L ​​/usr /X11R6 /を実行すると、次の出力が表示されます。 lib -lgtk -lgdk -rdynamic

-lgmodule -lglib -ldl -lXi -lXext -lX11 -lm"、これは、gtk1.2プログラムをコンパイルするために必要なgtkリンクパラメータです(xxx-configを除く)。 libsパラメーターの外側にあるもう1つのパラメーターは--cfです。 Lagsはディレクトリを含むヘッダファイルを生成するために使用されます。これは-Iパラメータです。 gtk-config - libs --cflagsを実行して出力を確認することができます。

問題はこれらの出力結果の使い方です。最も愚かな方法はコピー&ペーストまたはコピーです。 gtkプログラムのコンパイルのように、この `xxxx-config --libs --cflags`をコンパイルのコマンドラインに追加してください:gcc gtktest.c` gtk-config --libs --cflags`これはほとんど同じです。 `一重引用符ではなく、1キーの左側にあるものに注意してください。

xxx-configに加えて、新しい開発パッケージは一般にリンクパラメータを生成するためにpkg-configを使用します。使用法はxxx-configに似ていますが、xxx-configは特定の開発パッケージ用です。 configには、サポートされているすべての開発パッケージを一覧表示するには、pkg-config --list-allコマンドを使用しますpkg-configの使用法は、pkg -config pagName --libs --cflagsです。 pkg-config - list-allにリストされているリストの1つであるパッケージ名です例えば、gtk1.2の名前はgtk +、pkg-

config gtk + --libs --cflagsそしてgtkです。 -config --libs --cflagsは同じです。例えば:gcc gtktest.c `pkg-config gtk + --libs --cflags`
-includeと-I parameters

-includeはヘッダファイルをインクルードするのに使われますが、一般的にはインクルードヘッダファイルは#include xxxxxxを使用してソースコードに実装されており、-includeパラメータはめったに使用されません。 -Iパラメータはヘッダファイルディレクトリを指定するのに使用され、/usr /includeディレクトリは通常指定されない、gccはそこへ行くことを知っています、しかしヘッダファイルが/usr /includeにない場合、ヘッダのように-Iパラメータを指定する必要があります。ファイルは/myincludeディレクトリに配置され、コンパイルのコマンドラインでは-I /myincludeパラメータが追加されますが、追加しないと、「xxxx.h:そのようなファイルまたはディレクトリはありません」というエラーが表示されます。 -Iパラメーターには、-Iで指定できる、現在のディレクトリー内のヘッダー・ファイルなどの相対パスを使用できます。上記の--cflagsパラメータは、-Iパラメータを生成するために使用されます。

6、-O parameter

これはプログラム最適化パラメータで、一般的に使用されます。 gcc test.c -O2などの使用プログラム、最適化されていないプログラムは最適化されていないプログラムよりも小さく、実行速度も向上します。

7、-sharedパラメータはgccなどの動的ライブラリのコンパイル時に使用されます。 -shared test.c -o libtest.so

8、いくつかの関連する環境変数PKG_CONFIG_PATH:pkg-configによって使用されるpcファイルのパスを指定するために使用されます。デフォルトは/usr /lib /pkgconfです。zh-CN"],null,[1],zh-TW"]]]

Copyright © Windowsの知識 All Rights Reserved