• 線上工具
  • - 計算器
    • 字元計數
  • - 下載
    • TikTok 下載
    • 抖音下載
  • - 網路工具
    • BASE64
    • Base64 轉圖片
    • 圖片轉 Base64
    • URL 編碼
    • JavaScript
    • 時間戳
    • Unicode 轉換器
    • JSON 格式化
    • 修改副檔名
    • 製作列表
    • CSS 優化器
  • - 加密工具
    • MD5 加密
    • 隨機生成器
  • - 圖像工具
    • 圖像壓縮
    • QR 碼生成器
    • QR 碼識別器
    • 壁紙預覽
    • 圖片 EXIF
  • - 資訊表
    • 血型遺傳
    • 服裝尺寸
    • app.tool_clock
  • [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

其他工具
  • 字元計數 TikTok 下載 抖音下載 BASE64 Base64 轉圖片 圖片轉 Base64 URL 編碼 JavaScript 時間戳 Unicode 轉換器 JSON 格式化 修改副檔名 製作列表 CSS 優化器 MD5 加密 隨機生成器 圖像壓縮 QR 碼生成器 QR 碼識別器 壁紙預覽 圖片 EXIF 血型遺傳 服裝尺寸 app.tool_clock
  • 囲碁、一力遼本因坊が初防衛 余正麒破り三冠堅持
    2024-05-30

    『ボールアンドチェイン』南Q太著 評者:三木那由他【このマンガもすごい!】
    2024-05-30

    藤井聡太八冠が勝ち、最終局へ 将棋叡王戦で2勝2敗
    2024-05-31

    【6月1日~2日】週末必見の“アート&デザイン”まとめ!
    2024-06-01

    “家形埴輪”大集合、総選挙も 「住宅展示場の気分で」、奈良
    2024-06-01

    三姉妹が温泉旅行で取っ組み合いの大げんか うっとうしくてめんどうくさい家族愛描く「お母さんが一緒」
    2024-06-02

    大阪はアートとデザインの街となるか? Osaka Art & Design 2024の見どころをレポート
    2024-06-03

    峰不二子役の増山江威子さん死去 声優、艶ある声でルパン翻弄
    2024-06-03

    応挙手本?に描いたトラ甦れ…徳島の寺のふすま絵修復へ
    2024-06-04

    アレクサンダー・カルダー個展「カルダー:そよぐ、感じる、日本」が開催
    2024-06-04

    「君たちはどう生きるか」展 第二部 レイアウト編(三鷹の森ジブリ美術館)レポート。絵を描くことの営為、そして苦悩も見せる
    2024-06-04

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

    「ロエベ ファンデーション クラフト プライズ 2024」の大賞が発表。等身大のセラミック彫刻を制作したアンドレス・アンサが受賞
    2024-06-05

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

    多摩美術大学がAIやサーキュラーなど5つの最先端のテーマを研究するプラットフォームをスタート
    2024-06-04

    【1971年の今日 : 6月5日】京王プラザホテル全面開業―今からは想像もできない着工前の巨大な貯水池だった頃の写真も
    2024-06-05

    「避難いただけるほうが一安心」珠洲で激しい揺れに耐えた仏像、奈良博で縁つなぐ
    2024-06-04

    「安全だと誰も言わない万博」爆発事故で教職員組合 大阪府に子供無料招待中止申し入れ
    2024-06-04

    「さどの島銀河芸術祭2024」が開催。新潟・佐渡島各所で作品を制作展示
    2024-06-06

    もしあの時に戻れたら…歌人・穂村弘が話題書『迷子手帳』で明かす、今も忘れられない「失敗」
    2024-06-07

    ©  Dopu Box
    💛