2008年02月02日

共有オブジェクト(*.so)を作成するMakefile

Makefileの書き方って、結構忘れがちですよね。
というわけで、メモ。

LinuxでSharedObject(=共有オブジェクト(*.so))ライブラリを作成するMakefileのサンプルです。

あっ。C++版です。


#
# Makefile for
CC = g++
SRCDIR = .
OBJDIR = ./
INCD00 = ./
TARGET = libSample.so
DEST = ./
CP = /bin/mv
LIBS =
CFLAGS = -Wall -O -pthread -DX86
INCD = -I. -I$(INCD00)

vpath %.h $(INCD00)
vpath %.cpp $(INCD00)
#
SRCS=\
$(INCD00)Socket.cpp \
$(INCD00)SocketStream.cpp \
#
OBJS=\
$(OBJDIR)Socket.o \
$(OBJDIR)SocketStream.o \
#
all: $(TARGET)
#
.cpp.o:
$(CC) $(CFLAGS) -c $(INCD) $<
#
$(TARGET): $(OBJS) $(SRCS)
$(CC) -shared -Wl,-soname,$(TARGET) -o $(TARGET) $(OBJS) $(LIBS)
@rm -f $(OBJS)
@echo "libSample.so make success"

install: $(TARGET)
@echo Installing $(TARGET) in $(DEST)
@$(CP) $(TARGET) $(DEST)

clear clean:; @rm -f $(OBJS)
@rm -f $(TARGET)
#


良かったらクリックお願いします→banner_01.gif

2008.2.5訂正 余計なオプション(-pthread -DX86)を削除
posted by 台北猫々 at 17:57| Comment(0) | TrackBack(0) | 技術メモ(Linux C/C++)

2008年02月01日

また、やってもうた〜

昨日公開したRawSocketクラスでプロトコルにIPPROTO_RAWを指定して、イーサネットヘッダから作成して送信してみようと思ってやってみたのですが、上手くいかない・・・

パケットキャプチャでパケット内容を確認してみると、IPヘッダのプロトコルタイプが0x01→0xFFに勝手に書き換わってる?!どういうこと?

と思って色々知らべてみると、setsockoptでIPPROTO_IPにIP_HDRINCLを指定するようにしないといけないとのこと。IP_HDRINCLはIPヘッダをユーザアプリで作成するので手を出さないでということらしい。

なるほどなるほどと思って、改めて送信しようとすると今度はsendtoがエラー(エラー番号は10004)・・・どういうこと?

と思って調べていると、WindowsXP SP2では、RAWソケットに対してセキュリティ的な問題から制限を加えているとのこと・・・そういえばNMapがSP2をあてると動かなくなるということを聞いたことがあった・・・

ということで、一応IP_HDRINCLの設定を入れたものを、この後リリースしますが、WindowsXPではIPPROTO_RAWは制限を受けますので、ご注意を。

回避するには、WinSock2を使用せずに別のパケットキャプチャライブラリを使うしかないようですね(要はNMapと同じ対応するしかない)。

う〜ん。中途半端な感じになってしまった。ちょっと悔しい猫
posted by 台北猫々 at 22:19| Comment(0) | TrackBack(0) | 日記