• 온라인 도구
  • - 계산기
    • 문자 수
  • - 다운로드
    • TikTok 다운로드
    • DouYin 다운로드
  • - 웹 도구
    • BASE64
    • Base64→이미지
    • 이미지→Base64
    • URL 인코딩
    • JavaScript
    • 타임스탬프
    • 유니코드 변환기
    • JSON 형식
    • 확장자 수정
    • 목록 만들기
    • CSS 최적화
  • - 암호화 도구
    • MD5 암호화
    • 랜덤 생성기
  • - 이미지 도구
    • 이미지 압축
    • QR 코드 생성기
    • QR 코드 리더
    • 배경 화면 미리보기
    • 이미지 EXIF
  • - 정보 시트
    • 혈액형 유전
    • 의류 사이즈
  • [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 다운로드 DouYin 다운로드 BASE64 Base64→이미지 이미지→Base64 URL 인코딩 JavaScript 타임스탬프 유니코드 변환기 JSON 형식 확장자 수정 목록 만들기 CSS 최적화 MD5 암호화 랜덤 생성기 이미지 압축 QR 코드 생성기 QR 코드 리더 배경 화면 미리보기 이미지 EXIF 혈액형 유전 의류 사이즈
  • テレビ東京、不適切表現で謝罪 「激録・警察密着24時!!」
    2024-05-29

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

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

    “ひばり”の愛称にふさわしい美しいメロディ。ハイドンの『弦楽四重奏曲第67番』【クラシック今日は何の日?】
    2024-05-30

    小学館も来週に報告書公表
    2024-05-31

    芸術レベルのグッズも登場! パリ・東京・大阪の名コレクションが集まる「TRIO展」
    2024-06-01

    【大河ドラマ「光る君へ」本日第22話】紫式部と清少納言は「顔を合わせていなかった」?
    2024-06-01

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

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

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

    「ロバート」秋山さんが鳥取PR イリュージョニストに扮し
    2024-06-04

    第34回福岡アジア文化賞受賞者が決定。大賞は真鍋大度
    2024-06-04

    太宰府天満宮で「Fukuoka Art Book Fair」が開催へ
    2024-06-04

    「ゲバルト」展が東京日仏学院などで開催。反暴力的反応とその美的様式を探る
    2024-06-05

    「梅津庸一 エキシビションメーカー」(ワタリウム美術館)開幕レポート。きっとあなたも展覧会をつくりたくなる
    2024-06-04

    夜の美術館を楽しめる「サマーナイトミュージアム2024」が開催。東京都現代美術館、東京都庭園美術館などで入場料割引も
    2024-06-04

    沙に囲まれた残酷な世界が私たちの社会を浮かび上がらせる。期待の作家が令和の世に送り出す、新たな青春のバイブル!
    2024-06-06

    佐渡金山「情報照会」と勧告 世界遺産登録に可能性残す
    2024-06-06

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

    今週末に見たい展覧会ベスト8。閉幕の横浜トリエンナーレから、「梅津庸一 クリスタルパレス」、石川九楊の2ヶ月連続個展まで
    2024-06-06

    ©  Dopu Box
    💛