[ubuntu-jp:4165] すでにビルドされているバイナリーの挙動が、ライブラリの開発用パッケージのありなしで変わる問題

Takashi Sakamoto o-takashi @ sakamocchi.jp
2012年 6月 20日 (水) 04:50:39 UTC


みなさまこんにちは。坂本と申します。

ライブラリを利用するソフトウェアをビルドしたのですが、問題に遭遇したので
ご相談します。

今回、ライブラリ「libunicap2」を利用したソフトウェアをビルドしました。
ビルドのためにライブラリのヘッダファイルなどを含むパッケージ
「libunicap2-dev」をインストールしました。
ビルドは無事に終わり、作成されたバイナリーの動作も期待通りでした。
ここで、「libunicap2-dev」をアンインストールしたところ、ビルド済みのバイ
ナリーの挙動が変わってしまいました。

私の理解では、パッケージ「*-dev」はライブラリのヘッダファイルなどを含む
開発用のパッケージであって、ビルドされたバイナリーはこのパッケージがあっ
てもなくても同じように動作すると思います。

しかし先述の通り、libunicap2はその限りではありませんでした。

私の理解が間違いなのかあるいはライブラリのパッケージングにバグがあるの
か、私には判断できないので、教えていただけたらと思います。


なお、この問題を再現するために作成したプログラムが以下です。このプログラ
ムは、現在システムに認識されているビデオ入力デバイスを検索して、その名前
を出力します。コンパイルされたバイナリーは、libunicap2-devのインストール
されている環境では期待通りにビデオ入力デバイス名を出力しますが、インス
トールされていない環境では何も出力しません。

#####
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>

#include <unicap/unicap.h>

int
main(void)
{
	unicap_status_t status;
	unicap_device_t devices[32];
	
	int count;
	int index;
	
	for ( index = 0; index < 32; index++ )
	{
		status = unicap_enumerate_devices(NULL, &devices[index], index);
		if ( !(status & STATUS_FAILURE) )
		{
			printf("device found: %s\n", devices[index].model_name);
		}
	}
	
	return 1;
}
#####
$ gcc -o seek.exe ./seek.c -lunicap -I/usr/include/unicap
#####

よろしくお願いします。


坂本 貴史
o-takashi @ sakamocchi.jp



ubuntu-jp メーリングリストの案内