• 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

    制作期間「足りていなかった可能性」
    2024-05-31

    『マッドマックス:フュリオサ』に登場する「ある絵画」は何を意味しているのか? ギリシア神話と「ファム・ファタル」から考察する
    2024-06-01

    デザインジャーナリストによる新しいデザイン誌の登場です!
    2024-06-01

    元アシスタントが語る Dr.スランプ「あのキャラ」の誕生秘話
    2024-06-01

    <今週の本棚・次回の予定>6月8日の毎日新聞書評欄は『新装版 ペルーからきた私の娘』ほか
    2024-06-03

    「工芸的美しさの行方―うつわ・包み・装飾」が東京と京都で開催。第1弾はBONDED GALLERYにて7月から
    2024-06-03

    文科相、佐渡金山の果報待ちたい ユネスコの評価、近く判明
    2024-06-03

    映画「ゴジラ‐1.0」の震電は「コックピットだけ復元」のはずだった…山崎貴監督がエピソード披露
    2024-06-04

    写真家たちは強大な権力の抑圧にどう抗ったのか。バルト三国の写真家に焦点を当てる展覧会をレポート
    2024-06-04

    アルテミス計画&天の川銀河! 大人も学んで楽しめる「大人レゴ」最新ラインナップは”宇宙”がテーマ!
    2024-06-03

    レイモンド・ローウィの名言「優れたインダストリアルデザインは、…」【本と名言365】
    2024-06-04

    稀代のピアニスト、マルタ・アルゲリッチの伝説の始まりはこの1曲から【クラシック今日は何の日?】
    2024-06-04

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

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

    今週末に見たい展覧会ベスト13。「令和6年 新指定国宝・重要文化財」展から国立西洋美術館の現代美術展、KYOTOGRAPHIEまで
    2024-06-04

    口腔ケアで高齢者を守ろう 「おとなの歯磨き」訪問歯科医が出版
    2024-06-04

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

    子供と行きたいおすすめ美術館【東京編】。子連れ、親子でアートを楽しもう!
    2024-06-06

    「art stage OSAKA 2024」が9月に開催。大阪・関西万博への機運も醸成
    2024-06-05

    ©  Dopu Box
    💛