• Herramientas Online
  • - Calculadoras
    • Contador de caracteres
  • - Descarga
    • Descarga de TikTok
    • Descarga de DouYin
  • - Herramientas web
    • BASE64
    • Base64 a imagen
    • Imagen a Base64
    • Codificación URL
    • JavaScript
    • Timestamp
    • Convertidor Unicode
    • Formato JSON
    • Modificar extensión
    • Crear lista
    • Optimizador CSS
  • - Herramientas de cifrado
    • Cifrado MD5
    • Generador aleatorio
  • - Herramientas de imagen
    • Compresión de imágenes
    • Generador de código QR
    • Lector de código QR
    • Vista previa de fondo
  • - Hojas de información
    • Herencia de grupo sanguíneo
    • Tallas de ropa
  • [email protected]
DopuBox
  • English
  • Español
  • Français
  • 日本語
  • 한국어
  • 简体中文
  • 繁體中文
全部 ニュース Meta Code 文化・アート
Linux GCC共通コマンド詳細
2022-02-05

1.概要

GCCの意味もGNU C Compilerだけです。ここ数年の発展を経て、GCCはすでにC言語をサポートするだけでなく、Ada言語、C++言語、Java言語、Objective C言語、Pascal言語、COBOL言語、関数式プログラミングと論理プログラミングをサポートするMercury言語などもサポートされています。GCCもGNU C言語コンパイラという意味だけではなく、GNU Compiler CollectionつまりGNUコンパイラファミリーという意味になりました。一方,GCCのオペレーティングシステムプラットフォームおよびハードウェアプラットフォームに対するサポートといえば,一言で言えば,どこにでもある.

2.単純コンパイル

サンプル・プログラムは次のとおりです。

//test.c #include int main(void) { printf("Hello World!\n"); return 0; }

このプログラムは、一歩一歩のコンパイル命令です。

gcc test.c -o test

実質的に、上記のコンパイルプロセスは、前処理(プレコンパイル、Preprocessingとも呼ばれる)、コンパイル(Compilation)、アセンブリ(Assembly)、および接続(Linking)の4段階に分けて行われる。

2.1前処理

gcc -E test.c -o test.iまたはgcc-E test.c

testを出力できます。iファイルにtestが格納されている.c前処理後のコード。開くi書類、見てみれば、分かります。後のコマンドは、コマンドラインウィンドウに直接前処理後のコードを出力します。

gccの-Eオプションは,コンパイラを前処理後に停止させ,前処理結果を出力することができる.本例では、前処理の結果stdioとなる.hファイルの内容をtestに挿入する.cに当たった。

2.2アセンブリコードにコンパイル(Compilation)

前処理後、生成するtestに直接対することができる.iファイルのコンパイル、アセンブリコードの生成:

gcc -S test.i -o test.s

gccの-Sオプションは、プログラムコンパイル中にアセンブリコードを生成した後、停止し、-o出力アセンブリコードファイルを示す。

2.3アセンブリ(Assembly)

前のセクションで生成するアセンブリコードファイルtestについて.s,gasアセンブリは、次のようにターゲットファイルにコンパイルする責任を負います。

gcc -c test.s -o test.o

2.4接続(Linking)

gccコネクタはgasが提供し、プログラムのターゲットファイルを必要なすべての追加のターゲットファイルに接続し、最終的に実行可能なファイルを生成する責任を負います。追加のターゲットファイルには、静的接続ライブラリと動的接続ライブラリが含まれます。

前のセクションで生成するtestについて.o,これをC標準入出力ライブラリに接続し,最終的にプログラムtestを生成する

gcc test.o -o test

コマンドラインウィンドウで./test、ハローワールドと言わせましょう!

3.複数のプログラムファイルのコンパイル

通常、プログラム全体は複数のソースファイルからなり、それに応じて複数のコンパイルユニットが形成され、GCCを用いてこれらのコンパイルユニットをうまく管理することができる。test 1があると仮定する.cとtest 2.c 2つのソースファイルからなるプログラムは、それらをコンパイルし、最終的に実行可能なプログラムtestを生成するために、次のコマンドを使用することができます。

gcc test1.c test2.c -o test

同時に処理されたファイルが1つ以上ある場合、GCCは前処理、コンパイル、リンクの手順に従って順次行われます。深く考えると、上記のコマンドは、次の3つのコマンドを順次実行することにほぼ相当します。

gcc -c test1.c -o test1.o gcc -c test2.c -o test2.o gcc test1.o test2.o -o test

4.エラーチェック

gcc -pedantic illcode.c -o illcode

-pedanticコンパイルオプションは、コンパイラがANSI/ISO C規格と完全に互換性があることを保証するものではありません。Linuxプログラマーがこの目標に近づくのを助けるためにしか使用できません。あるいは、-pedanticオプションは、プログラマーがANSI/ISO C規格に合致しないコードを発見するのに役立ちますが、すべてではありません。実際には、ANSI/ISO C言語規格でコンパイラ診断が要求されている場合だけ、GCCに発見され、警告される可能性があります。

-pedanticに加えて、GCCにはいくつかの他のコンパイルオプションも有用な警告情報を生成することができます。これらのオプションの多くは-Wで始まり、その中で最も価値のある当数-Wallであり、GCCにできるだけ多くの警告情報を生成させることができます。

gcc -Wall illcode.c -o illcode

GCCからの警告メッセージは厳密には誤りとは言えないが,誤りの居場所になる可能性が高い.優れたLinuxプログラマーは、自分のコードが常に標準的で丈夫な特性を維持するように、警告情報を避ける必要があります。だから警告情報を符号化エラーとして扱うのは、称賛に値する行為です!したがって、コンパイラに-Werrorオプションを付けると、GCCは警告が発生したすべての場所でコンパイルを停止し、プログラマに自分のコードを修正させます。以下のようにします。

gcc -Werror test.c -o test

5.ライブラリファイル接続

ソフトウェアを開発する際、サードパーティ製の関数ライブラリを全く使用しないことは珍しく、通常、多くの関数ライブラリのサポートを借りて対応する機能を完了する必要があります。プログラマの観点から見ると、関数ライブラリは実際にはヘッダファイル(.h)とライブラリファイル(so、またはlib、dll)の集合である。。Linuxのほとんどの関数はデフォルトで/usr/include/ディレクトリにヘッダファイルを配置しますが、ライブラリファイルは/usr/lib/ディレクトリに配置されます。Windowsで使用するライブラリファイルは、主にVisual Stidoのディレクトリの下にあるincludeとlib、およびシステムフォルダの下に配置されます。しかし、使用するライブラリがこれらのディレクトリの下にない場合もあるので、GCCはコンパイル時に必要なヘッダファイルとライブラリファイルを独自の方法で検索する必要があります。

例えばプログラムですcはlinux上でcを使ってmysqlに接続して、この时私达はmysqlの公式サイトに行ってMySQL ConnectorsのCライブラリをダウンロードしなければならなくて、ダウンロードして解凍した后に、1つのincludeフォルダがあって、中はmysql connectorsのヘッダファイルを含んで、もう1つのlibフォルダがあって、中はバイナリsoファイルlibmysqlclientを含みます.so

ここでincluldeフォルダのパスは/usr/dev/mysql/include、libフォルダは/usr/dev/mysql/libです

5.1実行可能ファイルへのコンパイル

まずコンパイルを行いますcをターゲットファイルとし、このとき実行する必要がある

gcc –c –I /usr/dev/mysql/include test.c –o test.o

5.2リンク

最後に、すべてのターゲットファイルを実行可能ファイルにリンクします。

gcc –L /usr/dev/mysql/lib –lmysqlclient test.o –o test

Linuxの下のライブラリファイルには、動的リンクライブラリ(通常.soで終わる)と静的リンクライブラリ(通常.aで終わる)の2つのクラスがあります。両者の違いは、プログラム実行時に必要なコードが実行時に動的にロードされるか、コンパイル時に静的にロードされるかだけです。

5.3リンク強制時の静的リンクライブラリの使用

デフォルトでは、GCCはリンク時にダイナミックリンクライブラリを優先し、ダイナミックリンクライブラリが存在しない場合にのみ静的リンクライブラリを使用することを考慮し、必要に応じてコンパイル時に-staticオプションを追加して、静的リンクライブラリを強制的に使用することができます。

/usr/dev/mysql/libディレクトリの下にリンクがある場合に必要なライブラリファイルlibmysqlclient.soとlibmysqlclient.a,GCCがリンク時に静的リンクライブラリのみに使用されるようにするには,以下のコマンドを用いることができる.

gcc –L /usr/dev/mysql/lib –static –lmysqlclient test.o –o test

静的ライブラリリンク時のパスの検索順序:

1.ldはGCCコマンドのパラメータ-Lを探します

2.さらにgccの環境変数LIBRARYを探すPATH

3.内定ディレクトリ/lib/usr/lib/usr/local/libを探しますこれは当初compile gccの時にプログラム内に書いたものです

動的リンク時、実行時のパスの検索順序:

1.ターゲットコードのコンパイル時に指定した動的ライブラリ検索パス

2.環境変数LD_LIBRARY_PATH指定の動的ライブラリ検索パス

3.プロファイル/etc/ld.so.confで指定したダイナミックライブラリ検索パス

4.デフォルトのダイナミックライブラリ検索パス/lib

5.デフォルトのダイナミックライブラリ検索パス/usr/lib

環境変数について:

LIBRARY_PATH環境変数:プログラム静的リンクライブラリファイル検索パスを指定する

LD_LIBRARY_PATH環境変数:プログラム動的リンクライブラリファイル検索パスを指定する


ソース元URL:https://dopubox.com/article/p/efe01dfbaecab92b

Otras Herramientas
  • Contador de caracteres Descarga de TikTok Descarga de DouYin BASE64 Base64 a imagen Imagen a Base64 Codificación URL JavaScript Timestamp Convertidor Unicode Formato JSON Modificar extensión Crear lista Optimizador CSS Cifrado MD5 Generador aleatorio Compresión de imágenes Generador de código QR Lector de código QR Vista previa de fondo Herencia de grupo sanguíneo Tallas de ropa
  • レノンのギター4.5億円 ビートルズ関連最高落札額
    2024-05-30

    ジョン・レノンのギター4億5千万円で落札
    2024-05-30

    一力が本因坊初防衛
    2024-05-30

    住所要件の指摘受け自主的に転入 東京・足立区の20代選管委員・古野香織さん
    2024-05-30

    ブームなぜ起きた? 東京国立近代美術館で「ハニワと土偶の近代」展
    2024-05-30

    日テレ、意思疎通できず信頼喪失 「セクシー田中さん」の調査結果
    2024-05-31

    むのたけじ賞、名称変更 「生前に障害者差別発言」
    2024-05-31

    杉真理×和田唱がビートルズをとことん語る!NHK-FMの人気番組「ディスカバー・ビートルズ」がオンライン講座として復活!
    2024-06-02

    IT国家の最先端研究を知って 奈良・宇陀市がエストニアへの短期留学事業
    2024-06-04

    知ってる? 「登録博物館等マーク」
    2024-06-05

    社会的関与の芸術。清水穣評 城戸保「駐車空間、文字景、光画」展/野村浩「Painter」展
    2024-06-04

    akakilikeの新作ダンス公演『希望の家』が松本・東京の2都市で上演へ
    2024-06-04

    今週末に見たい展覧会ベスト12。山武市百年後芸術祭、版画の青春、北斎に三島喜美代まで
    2024-06-04

    国際博物館の日、今年のテーマは「学びと研究のための博物館」
    2024-06-04

    特別展「梅津庸一 クリスタルパレス」が国立国際美術館で開催。00年代からの仕事を総覧
    2024-06-04

    クールべ《世界の起源》はなぜ攻撃されたのか? ポンピドゥー・センター・メッスで破壊・盗難事件
    2024-06-04

    スマイル社が性犯罪被害者支援の法人設立
    2024-06-04

    ユージーン・スタジオが東南アジアに美術館を建設予定。新法人YES__pte.ltdを設立し、インドネシア・ジャカルタに美術館準備室を開設
    2024-06-04

    ブリン・バン・バン・ボンが1位 ビルボード、上半期人気曲
    2024-06-06

    向田邦子の名言「…これが私の料理のお稽古なのです。」【本と名言365】
    2024-06-07

    ©  Dopu Box
    💛