タグ

buildに関するgologo13のブックマーク (14)

  • ダイナミックリンクとスタティックリンク

    前回は「ビルド」という作業の中身を解説しました。今回は、その中でも「リンク」に焦点を当てて、その作業の内容を解き明かします(編集部) 再利用可能なソフトをまとめたものがライブラリ 前回はビルドとは一体どういう作業なのかということを解説しました。ざっと復習すると、ビルドとはコンパイルとリンクを実行して、ソースコードから実行可能な形式のファイルを作ることです。コンパイルにはコンパイラ、リンクにはリンカというツールが使われるのでした。 リンカへの入力は、2種類あります。1つはソースコードをコンパイルした結果であるオブジェクトファイル。これは前回解説しました。もう1つはライブラリです。 ライブラリとは一般に、再利用可能なソフトウェアの集合を指します。汎用性の高い処理はライブラリにしておけば、次に必要になったときに、もう一度作らずに済むというわけです。世界には多種多様なライブラリが存在しています。A

    ダイナミックリンクとスタティックリンク
  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
  • Shared Object 入門

    最近の gcc だとシンボル解決がうまくいかないといかないことがあったので、ちょっと調べました。 次のような 3つのソースファイルがあったとして、ダイナミックリンクで作ってみましょう。 `main.c` int foo(void); int main(void) { return foo() + 1; } `foo.c` int bar(void); int foo(void) { return bar() + 1; } `bar.c` int bar(void) { return 0; } shared object を作るのに必要なのは、コンパイル時に `-fPIC` オプションをつけることと、リンク時に `-shared` オプションをつけることの 2点です。 $ gcc -fPIC -c -o bar.o bar.c $ gcc -shared -o libbar.so bar.o

  • 共有ライブラリ(lib*.so.*)の管理

    共有ライブラリは、プログラムの実行時に動的に読み込まれます。今日のLinux上のプログラムは、ほとんどが共有ライブラリを使用するようビルドされています。 ライブラリを静的にリンクしないことにより、次のようなメリットが得られます。 複数のプログラムで同じライブラリをリンクする必要がないので、各々のプログラムのサイズが小さくなる。 ライブラリを修正した場合、修正された共有ライブラリのみを差し替えるのみでよい。静的にリンクされている場合は関係するプログラムをすべてビルドし直さなければならない。 ldd - 依存する共有ライブラリを表示 指定したプログラムが依存する共有ライブラリを表示します。”=>”の左側が必要な共有ライブラリ、右側がその共有ライブラリが実在するパスです。 $ ldd /usr/sbin/postfix linux-gate.so.1 => (0xb7fad000) libpcr

  • 共有ライブラリのコンパイル時に必要な検索パスを追加する方法 - ドキッ!はてなブログに移転しました!

    依存するsoファイルが見つからない!? 共有ライブラリを作成したら実行時に依存するsoファイルが見つからない的なエラーが発生した。 具体的にはrubymysql apiモジュールライブラリで起きた gem install mysqlでインストールすると mysql 2.8.1 が入る。 でもコレが実行時にエラー起きる。 エラーの内容は LoadError: libmysqlclient.so.18: cannot open shared object file: No such file or directoryと出る。 mysqlモジュールはnative extensionなので内部でmysql_api.soというファイルを生成してそれを利用している。 そこで ldd /path/to/mysql_api.soとしてみると libmysqlclient.so.18 => not fou

    共有ライブラリのコンパイル時に必要な検索パスを追加する方法 - ドキッ!はてなブログに移転しました!
  • .dSYMファイルの使い方 - iPhoneアプリケーション開発

    iPhoneアプリのクラッシュログとして、デバッグシンボルが入ってない意味不明のログしか取り出せないことってないですか? そんなときに使えるかもしれないハックです。 iPhoneアプリをコンパイルした時にbuildフォルダの中のアプリのとなりに、.dSYMという拡張子のファイルができることに気づいてますか? どうもこのファイルはストリップされたデバッグシンボルが格納されているようです。このファイルを使って、上述のわかりにくいクラッシュログをシンボルつきのログに変換することできるスクリプトがあります! /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneRemoteDevice.xcodeplugin/Contents/Resources/symbolicatecrash これを/usr/

    .dSYMファイルの使い方 - iPhoneアプリケーション開発
  • オブジェクトファイルについて

    はじめに Binary Hacks の校正大会にて、あーセクションの話が少し説明不足で不親切だね、っていう話が出ました。あった方がいいかな、と思ったので、宣伝を兼ねて、ここに私が知っていることを書いておきます。 内容としては、 Binary Hacks に比べてかなりいい加減に書いています。例えば調べものは一切せずに書きます。著者の中で最もいい加減な私がよりもいい加減に書いたということで、 Binary Hacks の全ての文章はこれよりはレベルが上、というようなサンプルだと思って下さい。宣伝を兼ねるということで、これ単体ではフォローせずに Binary Hacks のここを見てね、というポインタだけ示す部分が多いです。『』で囲まれた文字列は Binary Hacks の中のハック名に対応しています。 書いてる最中なので、気が向いたら内容を追加します。 詳しい参考文献としては Linke

  • UNIX/Linux gccによるC共有ライブラリの作成 webzoit.net

    gccとはbash同様FSFのGNUプロジェクトによって開発されたコンパイラでGNU C Compiler、後にC/C++/Objective C/FORTRAN/Java...といった各種プログラミング言語に対応したことからGNU Compiler Collectionとして知られています。 コンパイルの過程 コンパイラとコンパイルではUNIX/Linux及びシェル環境におけるコンパイラとコンパイルについてccとgccの関係、続くUNIX/Linux C コンパイル過程では、実行ファイルができるまでに具体的に何が行われているのかについて、その流れを追いました。 そして実際にgccでコンパイルと中間ファイルの残し方、更にstatic library/スタティックライブラリ/静的ライブラリ(拡張子.a/archive/アーカイブ)ファイルの作成とリンクによる実行ファイルの作成をしてみました。

    UNIX/Linux gccによるC共有ライブラリの作成 webzoit.net
  • ライブラリ - Wikipedia

    この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。 出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方) 出典検索?: "ライブラリ" – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL (2019年10月) ライブラリ(英: library)は、汎用性の高い複数のプログラムを再利用可能な形でひとまとまりにしたものである。ライブラリと呼ぶときは、それ単体ではプログラムとして動作させることはできない、つまり実行ファイルではない場合がある。ライブラリは他のプログラムに何らかの機能を提供するコードの集まりと言える。ソースコードの場合と、オブジェクトコード、あるいは専用の形式を用いる場合とがある。たとえば、UNIXのライブラリはオブジェクトコードをarと呼ばれるアーカイ

  • いやなブログ: Linux の共有ライブラリを作るとき PIC でコンパイルするのはなぜか

    Linux の共有ライブラリを作るとき PIC でコンパイルするのはなぜか 通常、Linux の共有ライブラリを作るときは各 .c ファイルを PIC (Position Independent Code) となるようコンパイルします。しかし、実は PIC でコンパイルしなくても共有ライブラリは作れます。それでは PIC にする意味はあるのでしょうか。 さっそく実験してみます。 int func () { printf(""); printf(""); printf(""); } PIC でコンパイルするには gcc に -fpic または -fPIC を渡します。-fpic の方が小さく高速なコードを生成する可能性がありますが、プロセッサによっては -fpic で生成できる GOT (Global Offset Table) のサイズに制限があります。一方、-fPIC はどのプロセッサで

  • GNU開発ツール - 組み込み Linux 開発の手引き - アットウィキ

    Linux上でプログラムの開発を行うときには、GNU開発ツール(gccなど)を使うのが一般的です(もちろん、ほかの開発ツールを使う場合もあります)。 組み込みLinux開発を行う上では、GNU開発ツールに慣れ親しんでおくことが必須になります。 gccはGNU開発ツールの中でもっとも重要なツールです。すでに知っている方も多いとは思いますが、プログラム言語をコンパイルするときに使うツールです。プログラムから最終的に実行ファイルを作成するためにgccが行うことは、必要なオプションとともに別のサブプログラム(cpp、cc1、as、collect2)を順番に呼び出すことです。

    GNU開発ツール - 組み込み Linux 開発の手引き - アットウィキ
  • 共有ライブラリの作成 - hakeの日記

    前々から疑問に思っていたsoなファイルってどうやって作るんだろう?という疑問について調べてみました。ググったところこちらに解りやすい説明があったので実験してみる。環境は先日入れたzgcc42です。 ソースファイルは以下 ----main.cpp #include <stdio.h> #include "add.h" int main(){ int a = 2; int b = 3; int c; c = add(a,b); printf("%d + %d = %d\n", a, b, c); return 0; } -----add.h int add(int a, int b); -----add.cpp #include "add.h" int add(int a, int b){ return a + b ; } とりあえず普通にコンパイル。a.outができて実行できればおっけー $

    共有ライブラリの作成 - hakeの日記
  • Automakeでmakeする

    [ C++で開発 ] Automakeでmakeする GNU Automakeを使用すると、簡単な記述でMakefileを生成してくれます。類似ツールにimakeがありますが、imakeは事実上X Window Systemの一部となっており、Xアプリケーション用に調整されているので、非Xな環境やアプリケーション開発に使う際にはやや面倒です。 Automakeの超簡単原理 Automakeは、makeコマンドでビルドするための設定記述ファイルMakefileを、極めて簡単に記述するためのツールです。通常Makefileには、コンパイルする際の諸設定、リンクする際の諸設定、処理順序などを逐一記述しておかなくてはなりません。これは、よっぽどMakefileに慣れていないと苦痛ですし、慣れていても面倒な作業です。そこで、Makefileよりもずっと簡単な設定ファイルMakefile.amだけを記

  • waf チュートリアル - 純粋関数型雑記帳

    waf - The flexible build system http://code.google.com/p/waf/ wafというものを最近知り一目惚れしてしまったので、紹介記事を書きます。ユーザーが増えると嬉しいな。 wafとは何か?特徴・利点・使うべき理由 wafはPythonベースのビルドシステムです。同様のことを行うツールとして、Autotools、Scons、CMake、Antなどがあります。Sconsからの派生で、比較的新しいソフトウェアです。 分かりやすい Pythonで書かれており、スクリプトもPythonで記述します。シェルスクリプトと謎のマクロが入り混じるAutotoolsや、独自言語のCMakeなどに比べて扱い易いです。Pythonを知っていれば非常にすんなりと使いこなすことが出来ます。Pythonを知らなくても、他の独自言語を覚えるよりは実りがあるかと思います

    waf チュートリアル - 純粋関数型雑記帳
  • 1