前回作成したdllをテストするための実行ファイルを作ります。
test.c#include <stdio.h> #include <stdint.h> #include <windows.h> typedef uint32_t (__stdcall *keisan_type)(uint32_t a,uint32_t b); HMODULE dll; keisan_type keisan; int main(int argc,char** argv){ uint32_t a,b,ans; dll=LoadLibrary("study1.dll"); keisan=(keisan_type)GetProcAddress(dll,"keisan"); a=2; b=3; ans=keisan(a,b); printf("%d^2 + %d = %d\n",a,b,ans); return 0; }で、これをコンパイルするルールもMakefileに書くって手もあるんだけど、そんなそんな頻繁にいじらないので、直でコンパイルする。
/usr/bin/i686-w64-mingw32-gcc -o test.exe test.c
そして、実行
./test.exe
うまくいったわい。
では、64bitのDLLを作成してみる。いじるのはMakefileだけ。
Makefile_64TARGETNAME=study1 CC=/usr/bin/x86_64-w64-mingw32-gcc CXX=/usr/bin/x86_64-w64-mingw32-g++ LINK=/usr/bin/x86_64-w64-mingw32-gcc CFLAGS= -Wall -c LFLAGS= -o $(TARGETNAME)_64.dll -shared -static-libgcc -static-libstdc++ OBJS= $(TARGETNAME).o nijo.o tasu.o ALL : $(TARGETNAME)_64.dll $(TARGETNAME)_64.dll : $(OBJS) $(LINK) $(LFLAGS) $(OBJS) $(TARGETNAME).def .cpp{}.obj : $(CXX) $(CFLAGS) $< .c{}.obj : $(CC) $(CFLAGS) $< clean : rm $(OBJS) $(TARGETNAME)_64.dllで、Makeするわけだが、-fオプションでMakefile_64を指定するんだけど、一度cleanをしておく。32bitでコンパイルしたオブジェクトを消したいので。
make -f Makefile_64 clean
make -f Makefile_64
で、study1_64.dllができる。
では、これもテストしてみます。
test_64.c#include <stdio.h> #include <stdint.h> #include <windows.h> typedef uint32_t (__stdcall *keisan_type)(uint32_t a,uint32_t b); HMODULE dll; keisan_type keisan; int main(int argc,char** argv){ uint32_t a,b,ans; dll=LoadLibrary("study1_64.dll"); keisan=(keisan_type)GetProcAddress(dll,"keisan"); a=2; b=3; ans=keisan(a,b); printf("%d^2 + %d = %d\n",a,b,ans); return 0; }
dllのファイル名を変えただけ。で、直でコンパイルする。
/usr/bin/x86_64-w64-mingw32-gcc -o test_64.exe test_64.c
そして、実行
./test_64.exe
昔はcygwinでdll作っていたので、cygwin1.dllなしでも動くようにしたかったり、いろいろ勝手がわからなくてあれやこれややってみてたけど、mingwのおかげでだいぶ良くなった。そしてwslのおかげでMSYSが要らなくなったのでそれもだいぶ良くなった。
Visual Studioのライセンス条項がゆるくなってくれると、いわゆる会社でも今よりさらにコンピューティングが盛んになって、生産性が上がるのに、、、じゃぁ会社で買えよってスタンスか、いやプロフェッショナルプログラマーじゃない人もプログラミングする時代なのでなんとかならんもんか。まぁ拙者はマウスポチポチよりも黒い画面に向き合うのが好きなのでwslで満足してますです。
しかし、この手の指南をしているブログとかwebページって最後に「いかがでしたか」とかひどいやつだと「いかがだったでしょうか」とか書いてあるのが多いんだけど、なんでやろ。なんかいいことあんのかな。かすかにイラっとする。なんで、ささいな内容で誰かのためになっているって自信たっぷりなのか。(、、、自分も書いてたりして。)
あんたみたいなの、ろくな老人になれんよって、また、たしなめられる。
コメントをお書きください