まったく同じタイトルで @yamori813 さんが記事を書かれています。
すごく助かりました! ここでは @yamori813 さんの記事を補足するかたちで投稿いたします。
Win10環境でビルドする
[1] https://github.com/ZakKemble/libmcp2221
[2] https://github.com/signal11/hidapi
結論から書きますと... MinGW w/ PowerShell および WSL2でコンパイルできました。
PS >mingw32-gcc.exe ..\..\libmcp2221\hid.c ..\..\libmcp2221\libmcp2221.c main.c -lsetupapi -o gpio.exe
$ x86_64-w64-mingw32-gcc ../../libmcp2221/hid.c ../../libmcp2221/libmcp2221.c main.c -lsetupapi -o gpio.exe
- [1] と [2] を適当な場所に展開します。
- [1] の
example/gpio
に移動します。 -
../../libmcp2221/
に, [2]のwindowフォルダーにあるhid.c
と,[2]のhidapiフォルダーにあるhidapi.h
をコピーします。 - MinGWを用意してPATHを通します。WSL2では
sudo apt install mingw-w64
で導入しました。
補足 はまったところ
[1] で用意されたMakefileではコンパイルできませんでした。「未定義だよ!」的なエラーが出ます。
よくよく調べると,MinGWのリンク時に出ているようなのです。[2] は MinGW でビルド成功しましたので,そのMakefileを参考に,ソースファイルの指定,ライブラリーの指定を[2]にならって修正したところ,[1]のコンパイルに成功しました。
休日のほぼ2日間費やしました... いやー,Cのコンパイルの基本がわかっていないようです... 勉強になりました(前向き)
Makefileを使う場合は,以下のような感じになりました。
5c5
< main.c
---
> ../../libmcp2221/hid.c ../../libmcp2221/libmcp2221.c main.c # 追加
21c21
< -lmcp2221
---
> -lsetupapi # 変更
23c23,26
< EXECUTABLE=$(PROJECT)
---
> EXECUTABLE=$(PROJECT).exe # 変更
>
> #CC=x86_64-w64-mingw32-gcc # for WSL
> CC=mingw32-gcc # for Win
25d27
< CC=gcc
38c40,41
< rm -rf *.o $(EXECUTABLE)
---
> del *.o ..\..\libmcp2221\*.o $(EXECUTABLE) # win
> #rm -rf *.o ..\..\libmcp2221\*.o $(EXECUTABLE) # WSL
実行例
PS >mingw32-make.exe -f .\Makefile.mingw-win
Mac Big Sureの場合
@yamori813 の記事のとおり,ビルドできました。
$ pwd
/Users/numeru55/Documents/libmcp2221-master/examples/gpio
$ cc -o main ../../libmcp2221/hid.c ../../libmcp2221/libmcp2221.c main.c -framework IOKit -framework CoreFoundation
$ ls
Makefile libmcp2221.dll main.c
gpio.exe main* main.o
$
参考
以下のサンプルは,[2]で展開したディレクトリーに直接ソースを置いて,Makefile.mingw
を少し手直ししてコンパイルできました。若干コンパイルエラー出ましたが,私が理解できる範囲で修正して乗り越えました。(uint8_t
-> unsigned char
等)
このソースをデータシートと比較しながら読むことで,とてもよく理解ができました。これをもとに一つ一つ再構築していくのもいいですが,せっかくなので [1] を利用する方法を模索してみました。