Open4
Cygwinでlibimobiledeviceを動かそうとしたけどダメだった
敗因: Windows上のlibusbではコンフィギュレーションを変更できないため
これはどうしようもないね。。これは大昔のissueの一発目で指摘 https://github.com/libimobiledevice/libimobiledevice/issues/151#issuecomment-64983130 されている。
iTunes for Windowsがlibimobiledevice相当の機能を実装しているので、だいたいのツールはそちらを使用できる ...というか逆か。libimobiledeviceが、usbmux等必要なmacOS側の機能を再実装している。
最近のlibusbはusbdkドライバをサポートしているが、これもconfigの変更を現状サポートしていないようだし、仮にこれを乗り越えたとしても:
libusb: error [libusb_get_pollfds] external polling of libusb's internal descriptors is not yet supported on Windows platforms
Cygwinの poll
とlibusbを繋ぐ手段が存在しない。
getaddrinfo
が謎のエラー 10093
を返却する
libimobiledevice配下のプロジェクトは、Win32なビルドでは ws2_32
をリンクしてしまうため、 configure.ac
を編集して防ぐ必要がある。
diff --git a/configure.ac b/configure.ac
index cdd388b..667ec1e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -67,7 +67,7 @@ fi
# Check for operating system
AC_MSG_CHECKING([for platform-specific build settings])
case ${host_os} in
- *mingw32*|*cygwin*)
+ *mingw32*)
AC_MSG_RESULT([${host_os}])
win32=true
AC_DEFINE(WINVER, 0x0501, [minimum Windows version])
エラーコード 10093
はWinsockのエラー WSANOTINITIALISED
に相当する。
MACアドレスの取得
libimobiledevice-glue
のビルドは
#error get_primary_mac_address is not supported on this platform
によって失敗してしまう。
Cygwinも getifaddrs
自体は実装しているので、こんな感じで良いはず。。
diff --git a/src/socket.c b/src/socket.c
index ad6135f..339bb68 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -742,6 +742,15 @@ LIBIMOBILEDEVICE_GLUE_API int get_primary_mac_address(unsigned char mac_addr_buf
result = 0;
break;
}
+#elif defined (__CYGWIN__)
+ if (ifa->ifa_data) {
+ if(ifa->ifa_flags & IFF_LOOPBACK) {
+ continue;
+ }
+ memcpy(mac_addr_buf, ((struct sockaddr*)ifa->ifa_data)->sa_data /* is ifaddrs_hwdata */, 6);
+ result = 0;
+ break;
+ }
#else
#error get_primary_mac_address is not supported on this platform.
#endif
ビルドのメモ
以下の順にビルドする:
- https://github.com/libimobiledevice/libplist
- https://github.com/libimobiledevice/libimobiledevice-glue
- https://github.com/libimobiledevice/libusbmuxd
- https://github.com/libimobiledevice/libimobiledevice
- https://github.com/libimobiledevice/usbmuxd
ただし、普通に ./autogen.sh && make && make install
する前に
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig
して pkg-config
のパスを通しておく必要がある。