【问题标题】:MinGW, always linking with pthreadsMinGW,始终与 pthread 链接
【发布时间】:2017-01-04 18:01:55
【问题描述】:

我最近一直在尝试将 MinGW 用于我的开发目的,但出现了一些问题。

出于某种原因,它似乎总是想与 pthread 链接。 我尝试在 C 中编译一个简单的 hello world 并得到类似的错误

ld.exe: 找不到 -lpthread

显然它正在搜索 pthread 库,但没有找到它。我从 MinGW-get 下载了库,正如预期的那样,编译和链接工作正常。

然而,在 C 语言中为一个简单的 hello world 剥离可执行文件(仅包含 stdio.h)后,该文件仍然是 46k 大。 在 Cygwin 上用 gcc 编译剥离的同一个文件是 9k 的,MSVC 也是类似的。

所以它抱怨缺少图书馆。 提供库解决了问题并使其正常工作。 但是在 C 中剥离的 hello world 仍然是 46k,而在 cygwin 上使用 gcc 是 9k。

很自然地得出结论,MinGW 出于某种原因正在使用 pthread 库。

但我无法找到一种方法来禁用想要在任何地方与 pthread 链接的 MinGW。具有讽刺意味的是,我在谷歌上发现的所有内容都是人们无法让 pthread 与 MinGW 一起工作。

有什么办法让MinGW想和pthread链接?

【问题讨论】:

  • 您如何构建您的应用程序?和gcc hello.c一样吗?
  • @KirillDaybov 是的,我只运行 gcc hello.c 然后 strip a.exe 。我觉得奇怪的是,当我在没有任何参数的情况下调用 pthread 库时,它却在抱怨它,而且它也是一个全新的安装。
  • 看起来 mingw 没有 pthread 就无法工作。我发现another question 有同样的问题。他认为这是一个安装问题。
  • 它适用于我使用 MinGW-w64。
  • 无法复制 - 获取 mingw 的新副本,编译/剥离 hello.c。它没有链接到任何东西,只是 kernel32msvcrt

标签: c windows pthreads mingw ld


【解决方案1】:

在 Windows 上安装 MinGW-W64 时有多种可能性。 我打赌你是为 posix 线程而不是 win32 安装的。 再次运行安装程序并使用新创建的目录中的编译器。

【讨论】:

【解决方案2】:

重新安装 SDL2 避免 SDL 文件和 SDL2 文件之间的二进制冲突将立即解决问题。

要解决新问题,需要转到 SDL2 分发文件(复制到 MinGW 的那个)并从中复制 SDL2.dll [DLL from distributable][1]--- 通过将文件拖到您的调试和/或释放 .exe 文件所在的文件夹。(.exe + dll -> 对吗?)将 dll 移动到 exes。构建/运行它应该可以工作的程序!您应该会看到一条欢迎消息! https://www.caveofprogramming.com/c-for-complete-beginners/setting-up-sdl-windows.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 2018-01-22
    • 2011-11-06
    • 2017-01-06
    • 2012-08-27
    • 2015-05-14
    相关资源
    最近更新 更多