Add new...Clone CompilerExecutor From ThisOpt RemarksStack UsagePreprocessorASTLLVM IROpt PipelineDeviceRust MIRRust HIRRust Macro ExpansionGHC CoreGHC STGGHC CmmGCC Tree/RTLGNAT Debug TreeGNAT Debug Expanded CodeControl Flow Graph
がっつりとやるつもりはありませんが、もしかしたら読む必要が出るかもしれないので少しだけお勉強。 もともと仕組みを知ることが好きなので読み始めると結構面白いです。 (ほんとはarmのほうが知識としては必要なんだけど、それはまた後日調べる) はじめに 今回まとめているのはx86とx86_64アーキテクチャに関するものです。 armなどはまた異なったものとなります。 また、構文もいくつかあるようで、それぞれ AT&T構文、 Intel構文というようです。 構文の違い %raxなどのように、レジスタに%がついていたりするのはAT&T構文です。 ついていないものはIntel構文です。 また、セクションの定義など細かいところで色々と差異があるようです。 ソース・ディスティネーション 上記構文の中で特に覚えておかないと混乱するのがこの「ソース」と「ディスティネーション」の順番です。 例えば、raxレジス
コンパイル時に、バイナリデータを実行可能ファイルに埋め込み、プログラムコードから利用する方法。 (caseih と coderJeff のフォーラム投稿に基づく) この記事では、コンパイルされたプログラムにバイナリデータを含める方法と、これらにアクセスする方法について説明します。 原理 (G)LDリンカー(FreeBASIC 配付に含まれています)は、ファイル内のバイナリデータをオブジェクトファイルに変換することで処理できます。 このオブジェクトファイルは、データを読み取るためにプログラムコードからアクセスできるシンボルをエクスポートします。 リンカは、提供されたファイル名に基づいて2バイトのシンボルを作成します:
gccで静的ライブラリと動的ライブラリを作ってみました。静的ライブラリは前回のポストにも載せましたが、対比が分かりやすいように再掲します。 静的ライブラリは、libxxx.aというファイルです。拡張子のaはarchiveの略です。 以下では、加減乗除を行う関数が定義されたadd.o、sub.o、mul.o、div.oをarchiveしてlibhoge.aというファイルを作成します。 kenjih$ gcc -c add.c kenjih$ gcc -c sub.c kenjih$ gcc -c mul.c kenjih$ gcc -c div.c kenjih$ ar -q -v libhoge.a *.o のようにして静的ライブラリを作成します。 main.cからlibhoge.aの機能を使用する場合は、以下のようにコンパイルします。 kenjih$ gcc -o main main.c
静的ライブラリと共有ライブラリの作り方の手順を残す。 まず、言葉の定義として、 静的ライブラリは、スタティックライブラリ(static library)と同義である。英語訳しただけだ。 共有ライブラリは、動的(ダイナミック)ライブラリ(dynamic library)とほぼ同じだが同義ではない。 共有ライブラリは動的にロードされるのだが、下の2つの場合がある。 1. ビルド時に読み込むライブラリ内オブジェクトをリンクし、実行時にそれを動的に読み込む場合 2. 実行時に初めて読み込むライブラリが決まり、実行時にリンクしてそれを動的に読み込む場合 前者のことを指す場合は、動的ライブラリ、 後者の場合は、動的リンク、 という言葉を用いることにする。 もう一点。動的にリンクされた実行ファイルと共有ライブラリをstatifierを使って 静的にまとめる場合などもあるかもしれないが、そういった場合はど
目的 Linuxで.a(静的)と.so(動的)の2種類ライブラリを作成できるが、コンパイルする時に同じような方法で使用される。 即ち、異なるライブラリのlibA.aとlibA.soが存在しても、コンパイルのコマンドではライブラリの拡張子が省略され、gcc xxx -lAのようになるため、どっちが使用されるかは曖昧になる。 libA.aとlibA.soが共存する場合の動作確認をしたく、メモする。 先に結論 gcc -o main main.c -L. -lA のように、ライブラリlibA(-lAで指定)が指定されている場合、libA.so(動的)はlibA.a(静的)より優先的にリンクされる。 追記 gcc -o main main.c -L. -static -lA のように、「-static」を指定すれば、libA.a(静的)はリンクされる。 追記2 gcc -o main main.c
FreeBASIC で、静的ライブラリを生成する方法を示します。次に、コンパイラとして GCC を使って、C プログラムからそれを呼ぶ方法を示します。 注:GCC:GNU Compiler Collection。GNUプロジェクトによるフリーなコンパイラ。 この記事は、Windows を使うことで通しています。しかし、他のプラットホームの上の FreeBASIC への適用も、同様です。 このチュートリアルで: 簡単なテスト この簡単なテストのために、FreeBASIC の静的ライブラリを生成します。これは、何も依存関係はありません。 これで、より簡単に始められるようになります。そして、基本が働いていることをチェックできます。 まず最初にライブラリが必要です。これは、ただ一つの些細な関数で、2つの整数を合計して、結果を返すだけのものです。 手続きの定義で、cdecl と Alias を使うこ
コンパイル時に、バイナリデータを実行可能ファイルに埋め込み、プログラムコードから利用する方法。 (caseih と coderJeff のフォーラム投稿に基づく) この記事では、コンパイルされたプログラムにバイナリデータを含める方法と、これらにアクセスする方法について説明します。 原理 (G)LDリンカー(FreeBASIC 配付に含まれています)は、ファイル内のバイナリデータをオブジェクトファイルに変換することで処理できます。 このオブジェクトファイルは、データを読み取るためにプログラムコードからアクセスできるシンボルをエクスポートします。 リンカは、提供されたファイル名に基づいて2バイトのシンボルを作成します:
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く