四方山話/MinGWで吉里吉里プラグインを開発する際のメモ

Last-modified: 2016-02-23 (火) 13:11:59

MinGWで吉里吉里プラグインを開発する場合、makefileは大体次のような内容になる。
なお、Visual C++での吉里吉里プラグイン開発に関しては、色々な墓場が良くまとまっている。

TARGET = xp3enc.dll
SRCS = xp3enc.cpp
LIBS = -static-libgcc
DEF = $(TARGET:.dll=.def)
OBJS = $(SRCS:.cpp=.o)
CXXFLAGS = -O2
LDFLAGS = -shared -Wl,$(DEF) -Wl,--enable-stdcall-fixup -Wl,--add-stdcall-alias $(LIBS)
all: $(TARGET)
$(TARGET): $(OBJS)
	$(CXX) $(LDFLAGS) $(OUTPUT_OPTION) $(OBJS)
.PHONY: clean
clean:
	-rm *.o *.dll
  • DLLをビルドする場合は-sharedオプションを使う
    • -Wl,--add-stdcall-aliasオプションでサフィックス(@nn)なしシンボルにする
      • -Wl,--kill-atオプションでも可
  • ソースファイルの文字コードを指定する場合は-finput-charsetオプションを使う(…となっているが、-~-charsetオプションはMinGWのバージョンによっては機能したりしなかったりする)
  • --enable-stdcall-fixupオプションを指定する(曖昧リンクしない)のが望ましい
  • Dependency WalkerでMinGWのDLLに依存していないか確認すること。リンクしていたらスタティックリンクに変更すること
  • 出来たDLLはmsvcrt.dllに依存する。Windows 98以降ではOSに標準添付されているので、Windows XP以降に対応させるなら特に気にしなくて良いはず(←未確認)
  • 暗号化プラグインの場合は、吉里吉里リリーサー(krkrrel.exe)でリリースする時、[オプション-xp3enc.dllを使う]のチェックを忘れないこと(良く忘れる)