C++の動的なクラス呼び出し for Linux

C++のクラスを動的リンクにする方法について


別にライブラリを作るとかいう話ではなく、実行バイナリサイズを小さくするために使いたいというだけ。

いろいろ調べると、クラスのソースをそのまま共有オブジェクトとしてコンパイルすればいけるらしい。

Pow.h
class CPow {
	public:
		CPow();
		CPow(int base);
		~CPow();
		
		int Pow(int n);
		
	private:
		int m_nBase;
};

Pow.cpp
int CPow::Pow(int n)
{
	int	num = m_nBase;
	
	while (--n > 0) {
		num *= num;
	}
	
	return num;
}

Main.cpp
int main(int argc, char **argv)
{
	CPow	pow(3);
	
	printf("3^2=%d\n", pow.Pow(2));
	
	return 0;
}

Makefile
.PHONY	: all
all	:
	g++ -fPIC -shared -o Pow.so Pow.cpp
	g++ Main.o -o test Pow.so 

処理内容については不問で。。。

Pow.soを/usr/libにおいてldconfigしてからlddすると、
Pow.so => /usr/lib/Pow.so (0x4002b000)
libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x4002d000)
libm.so.6 => /lib/tls/libm.so.6 (0x400e0000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x40102000)
libc.so.6 => /lib/tls/libc.so.6 (0x42000000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
となっていて、実行バイナリからクラスの排除に成功

当然実行すれば、
# ./test
3^2=9
となる

あとは、実行速度とかを実際にバイナリサイズがでかくなったときに比較すればいいのかなぁ??
最終更新:2007年02月22日 18:58
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。