在windows libusbmuxd编译中用mingw编译c

Posted

技术标签:

【中文标题】在windows libusbmuxd编译中用mingw编译c【英文标题】:Compiling c with mingw in windows libusbmuxd compiling 【发布时间】:2015-07-22 09:08:58 【问题描述】:

所以我已经成功地在 windows mingw 上编译 libusbmuxd 以将其用于 windows 平台。

然而,尽管 autogen.sh 和 configure 没有出错

它无法在下面生成 libusbmuxd。有人对此有任何想法吗?是否有关于如何在 Windows 中构建的明确说明?

$ make
make all-recursive
make[1]: Entering directory /home/Naver/libusbmuxd-1.0.10' Making all in common make[2]: Entering directory/home/Naver/libusbmuxd-1.0.10/common'
CC collection.lo
CCLD libinternalcommon.la
make[2]: Leaving directory /home/Naver/libusbmuxd-1.0.10/common' Making all in src make[2]: Entering directory/home/Naver/libusbmuxd-1.0.10/src'
CC libusbmuxd.lo
libusbmuxd.c:46:26: error: expected ';', ',' or ')' before numeric constant
#define sleep(x) Sleep(x*1000)
^
libusbmuxd.c:46:25: error: expected ';', ',' or ')' before '' token
#define sleep(x) Sleep(x*1000)
^
make[2]: ** [libusbmuxd.lo] Error 1
make[2]: Leaving directory /home/Naver/libusbmuxd-1.0.10/src' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory/home/Naver/libusbmuxd-1.0.10'
make: *** [all] Error 2

【问题讨论】:

这个宏看起来很可疑。应该是#define sleep(x) Sleep((x)*1000) 很遗憾,这是因为 *** 的复制和粘贴问题。我已将其更新为#define sleep(x) Sleep((x)*1000)。错误与此无关,但我不知道为什么在 mingw 会发生这种情况。 【参考方案1】:

可能(见后文*)是您机器上的一个本地问题,因为查看the code 这条线很好。某些头文件可能已损坏/损坏。您可以检查上面直接包含的<winsock2.h>,它可能会导致此位置的编译器错误:

#ifdef WIN32
#include <windows.h>
#include <winsock2.h>
#define sleep(x) Sleep(x*1000)

因此,您可以例如预处理源文件 (cpp -E libusbmuxd.c &gt;libusbmuxd_pp.c) 并检查结果。 (尝试编译找到错误的新行号)。

*) 顺便说一句,我在 MinGW 中的 cpp 给了我这个:

D:\test>cpp -E test.c >test2.c
In file included from test.c:45:0:
d:\mingw\x86_64-w64-mingw32\include\winsock2.h:15:2: warning: #warning  Please include winsock2.h before windows.h [-Wcpp]
 #warning Please include winsock2.h before windows.h
  ^

所以也许在源代码中交换 #include 指令已经可以解决这个问题。

【讨论】:

以上是关于在windows libusbmuxd编译中用mingw编译c的主要内容,如果未能解决你的问题,请参考以下文章

颤振安装期间的libusbmuxd版本错误

sh libusbmuxd_error

在 React 项目中用与平台无关的 SASS 编译器替换 node-sass

golang编译dll给C#调用

如何交叉编译我的 Linux 应用程序以在 Linux 中获取 Windows 可执行文件?

我如何重新编译C#程序以在ARM CPU上运行?