いつの間にかはてなダイアリー市民になっていた。 立ち上げが去年の10月だったので1年以上かかったことになる。おせぇ。月に多くて5エントリぐらいだしな。 30日に1回は書いてないと剥奪されてしまうらしいので頑張って書いてみるぜ。 普段はPHPでWebシステムの開発をしているというのに、突然.soな共有ライブラリを扱った仕事が舞い込んできたのでお勉強。 C/C++自体はDOSやWindowsでよくやっていたのだがLinux上での開発は初めてだ。 WinMain()から始まってメッセージループがあってWindows API使いまくり、みたいな開発は得意だがLinuxはさっぱりわからん。 同じ言語でも土俵が違うだけで結構辛い戦いが予想される。ていうか、OSの違い以前にGUIとCUI(今回はCUIどころかアプリでもない)ってだけでも全然違うのに、「C言語できるんでしょ?」みたいなのはやめてほしい。
Universal Binary(ユニバーサルバイナリ)といえば、Macで”複数のCPUアーキテクチャやOSに対応している"ことを示すもの。ようはUniversalの印がついてれば同じアプリケーションが32bit CPUだろうが64bit CPUだろうが問題なく動く。 正確にはクロスアーキテクチャを実現するための技術の名前なんだけど、まぁ開発者としては作り方さえわかればいいんじゃね?ってことで、仕組みの解説は他のサイトに任せて作り方の説明。 ただし、XCodeでのやり方はたくさん出回ってるのでコマンドラインからの作り方。 MacのCPUは大きく分けてPower PCとIntel x86がある。そしてppcはたくさんのVERSIONがあるけれど、まぁ基本的に使うのはppc (32 bitのPower PC汎用) ,ppc64 (64 bitのPower PC), i386 (x86の32 b
2000.03.11 初版 ライブラリは、再利用を目的として作成されたコンパイル済みの関数の集合です。 linux以外のOS別 Shared Library の構築・使用ガイドは、 http://www.dais.is.tohoku.ac.jp/~kabe/vsd/dynald.htmlへどうぞ。 ライブラリの名前の先頭は、lib から始まります。Linux のライブラリには次の3種類あります。 スタティック 共有 ダイナミック スタティックライブラリは、コンパイル時にコードがプログラムに組込まれます。 モジュールサイズが大きくなりますが、別のマシンにバイナリで配布したときに そのライブラリがなくても動作します。 .a で終わるファイルです。 共有ライブラリは、プログラムの実行時にロードされます。マシンによっては、 その共有ライブラリがなかったり、バージョンが違ったりして、動作しないことが
そもそも私はコンソールプログラムしか書かないので、VisualStudioを使う本質的な意味はないのですが、単にIntellisenseを使いたくてVSを使っています。本格的にコードを作っているときなどは、Intellisenseが無いと頭がこんがらがって辛い。さらに、日本語を処理するプログラムも書かないので、日本語部分はコメントのみ。しかし、このコメントを英語で書いたりするとすぐ自分で自分のコードがわからなくなってしまうので、やはりここは日本語で書きたい。VSの環境だけならば、なにも考えずに(文字コードのことなど考えずに)すむのですが・・・。 しかし、私の場合そのコードを実行するのは殆どLinux上だったりするので、バグ取りとか細かい修正はLinux上で行います。そのときに使うのは主にvi(実際はvim)。で、viは漢字コードの違いを吸収してくれるので、SJISでもUTF8でも編集できる
メイクファイルの名称 メイクファイルの書式 ターゲット、依存ファイル、コマンド行 コメント 継続行 複数の依存ファイル 複数のコマンド行 Make の基本は、 「あるファイルが修正されたときに自動的に必要な作業を再実行させる」 ことにあります。 その再実行のためのルールを記述しているのがメイクファイルです。 ここでは、メイクファイルの名称と、その簡単な記述例を見てみます。 メイクファイルの名称 Make は「メイクファイル」に記述されたルールにしたがって動作します。 メイクファイルの名前は普通は「makefile」または「Makefile」です。 これ以外のファイルをメイクファイルにしている場合は、 コマンドラインからメイクファイル名を陽に指定しなければなりません。 よって、メイクファイル名が「makefile」または「Makefile」ならば、 単に $ make として実行することがで
※書いてあることの保障はしません。 MAKE入門 プログラミングを初めて暫くすると、ソースファイルが長くなってきたりして使いづらくなってきます。そのような時、たいていは、いくつかのソースに分割して、それらをつなげて(リンクするといいます)使うことが多いのではないでしょうか? しかし、今度はそのうちコンパイルのとき、毎回すごい長さのコマンドを打たなくてはならなくなってしまいます。しかも、いくつもプログラムをつくっていくうちにどのファイルをリンクしなければならないのか、わからなくなったりして大混乱状態に陥り兼ねません。 コンパイルの例 gcc -g -o main.o main.c gcc -g -o sub.o sub.c gcc -g -o func.o func.c gcc -g -o program main.o sub.o func.o こんなことになってきたら、Makeをつかってソ
スタティックライブラリの作成 1. はじめに 共通の関数を複数のプログラムで使い回すとき、ライブラリにした方が楽。 ということで挑戦。 2. 次に とりあえず腕ならし。簡単な関数をつくってみる。 あっさりできてしまった。 ソースは下。必要最低限しか書いていないから、見れば分かるでしょう。 Makefile error.c error.h util.c util.h main.c lib.tar.gz‥上のファイル全部 3. 一応説明 error.c、util.cからライブラリをつくり、名前はlibutil.aとする。 そして、それとmain.cをいっしょにコンパイルする。それだけ。 手でコンパイルするとすると、以下のようになる。 % gcc -c error.c % gcc -c util.c % ar r libutil.a error.o util.o % ranlib libutil
これは古い記事です。より新しい情報は以下のページにあります: → Windows XPにおける各種プログラミング言語のセットアップ作業のメモ まとめ この記事では、MinGW (Minimalist GNU for Windows)のインストールと使い方について解説します。 MinGWとは、GCC (GNU Compiler Collection)をWindowsに移植したものです。GCCとは、UNIX系OSでよく利用されているフリーのコンパイラです。 MinGWの入手とインストール 入手 以下のサイトから「MinGW-5.1.6.exe」をダウンロードします: → MinGW - Minimalist GNU for Windows (SourceForge.net) バージョン5.1.6が現時点(2010年5月2日現在)の最新です。 インストール 「MinGW-5.1.6.exe」はイ
1. ガイド¶ あなたがOMakeを始めて使うのであれば、 2. OMakeクイックスタートガイド はどのようにプロジェクトを始めるべきなのかについて、簡単に説明してくれるでしょう。 3. OMakeビルドサンプル ではプロジェクトをビルドするための、より詳細なコードサンプルを紹介しています。そして 4. OMake言語の概要と構文 では実際にプログラミングするときに役立つ、いくつかの一例を紹介しています。 1.1 注意事項¶ OMakeマニュアル 日本語訳 v1.3.2 このドキュメントは OMake バージョン0.9.8.6の マニュアル を日本語訳したものです。原文のニュアンスを忠実に翻訳するよう心がけていますが、意図しない翻訳ミスやドキュメントの不備があるかもしれません。よって、 内容の正確さについて保証することはできません。 2. クイックスタート OMakeを利用するためのクイ
OMakeすごい。OMakeはマジですごい。 OMakeはGNU makeの代替品みたいなものなんだけど、正直なところこのツールの強力さはGNU makeと比べると失礼なくらいすごい。これのおかげで、「コード修正→ビルド→デバッグ→コード修正→・・・」のループの、ビルドにあたる作業がほぼ消え去った。 ファイルの依存関係の解析がとにかくすごい。よくあるユースケースなんかの場合、最小限の手間でほぼ完璧に依存関係を網羅して、よしなにビルドしてくれる。 とりあえず、はやみずが実際に使ってみたケースを例にとってそのすごさの一端を紹介しようと思う。 case study 論より証拠ということで、自分が OMake を試しにつかってみたケースを紹介する。C言語でスタティックライブラリを作っていて、それに加えて簡単なテストプログラムを書いている。 /include/ 以下にヘッダファイルが全部ある /sr
gccとVC x86/x64環境で開発する上で, gccとVCはどちらも非常に優れたC/C++コンパイラです. ただLinuxとWindowsのどちらの環境でも動作するようなC/C++コードを書くためには, gccとVC, およびそれらが動作するOSの違いが問題になることがあります. ここではそれらの違いについてまとめていきたいと思います. なお説明を簡単にするためにマクロを多用していますが実際には可能なら別の手段をとるか, 名前がぶつからないような命名規則に則ったマクロ名をつけることをお薦めします. 対象 定義済みマクロ 有用なマクロ コンパイルオプション 演算子の代替表現の抑制 日本語のコメント 型 pragma attributeとdeclspec ファイル入出力 テキストとバイナリ 巨大なファイル static変数の初期化 snprintf 例外ハンドラ intrinsic関数
Makefileの基本 はじめに 大規模なアプリケーションを開発する場合,通常プログラムは複数のソースファイルとヘッダファイルから構築される.そのような場合,それぞれのファイルの依存関係を考えながらコマンドラインからコンパイルするのは非常に面倒である.また,一つのファイルを書き換えた場合にも,それを考慮しながらコンパイルする必要がある.このような煩雑さを解消するのがmakeコマンドである. ルールを記述する まず最も簡単なmakefileを見てみる. test: test1.o test2.o gcc -o test test1.o \ test2.o test1.o: test1.c test1.h test.h gcc -c test1.c test2.o: test2.c test2.h test.h gcc -c test2.c clean: rm test tes
ここでは,OpenCV を使ったプログラムの作り方を説明します. 目次 ライブラリの説明 インクルードするファイル gcc/g++ によるビルド Visutal Studio によるビルド ライブラリの説明 OpenCV は,以下のように機能ごとに分割された複数のライブラリで構成されています. cxcore OpenCV の基本的な機能を担っています. IplImage や CvMat などの基本構造体を使う場合や,様々な配列操作,画像への描画を行う場合に使用します. OpenCV の機能を使う場合は,必ず必要になります. cv コンピュータビジョン関連の機能を担っています. OpenCV の主部分と言えます. 勾配,エッジ,幾何変換,フィルタなどの画像処理関数の他,モーション解析,パターン認識,カメラキャリブレーションなどの機能が提供されます. highgui 画像のインターフェイス全般
CDT/RSEによるクロスコンパイルとリモートデバッグ:生産性向上への道 Eclipseで行うC/C++開発(3)(1/4 ページ) 前回は、サンプルアプリケーションを使って、C/C++開発環境CDTの機能を紹介いたしました。CDTのC/C++エディタやコンパイラ連携機能、グラフィカルビルド機能を用いることで、C/C++アプリケーションの開発を効率的に行えることが分かったと思います。 今回は、前回と同じサンプルアプリケーションを用いて、CDTでの“クロスコンパイル”の方法、Remote System Explorer(RSE)での“リモートデバッグ”の方法について解説します。また、RSEによるリモート操作機能についても併せて紹介します。 CDT、RSEの概要、インストール方法については第1回「組み込み開発におけるEclipseの有効性」を参照してください。 CDTでのクロスコンパイル クロ
ゆとりなもので,ついこないだまで動的リンクと静的リンクの違いがわかっていなかった.動的リンクというのが理解できた頃,そっかユーティリティライブラリは自分で共有ライブラリ作ってしまえばいいんだ,というごく当たり前のことが理解できた. UNIXをさわりはじめていた初期の頃,mecab.soのシンボリックが〜〜という用なハマりがあったのだけれど,あれは要するに実行時に共有ファイルへのパスを指定してあげればよかっただけのこと. わかると当たり前だけれど,わからないと「何がわからないのかわからない」状態に落ち込むなぁ,と改めて思いました. (幸いなことに,僕の周りには「ゆとり乙ww」と指導してくれる方々がいるので認識できるようになるのですが,少なくとも大学(院)時代はそうでなかったわけで,ゆとりスパイラルの恐ろしさを体感した気がしています.) というわけで自分用共有ライブラリの作り方をきちんと理解で
静的ライブラリのリンク時にundefined referenceエラーが出る(gcc) 概要 gccでリンク時にundefined referenceエラーが出る場合がある。 通常はオブジェクトやライブラリの指定忘れが原因であるが、 静的ライブラリをリンクする順番に間違いがあって出る場合もある (自分でMakefileを書く場合にこのミスをすることが多い) リンクの順番には依存性があり、あるオブジェクトが静的 ライブラリ内の関数を呼び出すときには呼び出される側の ライブラリは「後で」リンクする必要がある。 例えば foo.o が静的ライブラリ libfoo.a 内の関数を使用している、つまり foo.o → libfoo.a という依存関係があるとき、 g++ -o foo libfoo.a foo.o とするとundefined referenceエラーが出る。従って g++ -o fo
第 6 章 ライブラリの構築 この章では、ライブラリの構築方法を説明します。 ライブラリとは ライブラリには 2 つの利点があります。まず、ライブラリを使えば、コードをいくつかのアプリケーションで共有できます。共有したいコードがある場合は、そのコードを含むライブラリを作成し、コードを必要とするアプリケーションとリンクできます。次に、ライブラリを使えば、非常に大きなアプリケーションの複雑さを軽減できます。アプリケーションの中の、比較的独立した部分をライブラリとして構築および保守することで、プログラマは他の部分の作業により専念できるようになるためです。 ライブラリの構築とは、.o ファイルを作成し (コードを -c オプションでコンパイルし)、これらの .o ファイルを CC コマンドでライブラリに結合することです。ライブラリには、静的 (アーカイブ) ライブラリと動的 (共有) ライブラリ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く