无法在 gcc / mingw 10 * 上构建 ITK 5.* 版本 - Pthread 链接错误/ windows10

Unable to Build ITK 5.* version on gcc / mingw 10 * - Pthread linking error/ windows10

提问人:atanu 提问时间:11/26/2022 更新时间:11/26/2022 访问量:67

问:

我正在尝试从源代码编译 itk,它的版本为 5.3。 在 Windows 10 64 位机器上并安装了 mingw-w64 版本 10,我正在使用 cmake(最新版本)来构建 itk 源代码。

在构建过程中,我收到来自另一个源文件的链接器错误“为大多数 pthread 函数找到多个定义”。

由于我是直接从源代码构建的,而不是应该更改源文件,因此可以告诉我如何避免该错误?

我尝试过在没有任何帮助的情况下使用 -fcommon --allow-multiple-definition 链接器选项。

后来发现 -fno-common 是在最新的 gcc 版本中引入的。

还有没有办法在 Windows 10 中使用任何其他编译器构建此版本的 ITK ?

我尝试过使用 windows sdk latest,但这并没有让我选择通过 cmake 生成 make 文件。并给出一个奇怪的错误,即找不到Nmake文件,即使它是Windows的默认cmake生成器。

请注意:我对安装Visual Studio不感兴趣。这就是无法获取 MSVC 编译器的原因。

47%] 构建 CXX 对象 Modules/Core/Common/src/CMakeFiles/ITKCommon.dir/__/itkBuildInformation.cxx.obj [ 47%]链接 CXX 共享库 ........\bin\libITKCommon-5.2.dll c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libpthread.a(libwinpthread_la-cond.o):cond.c:(.text+0x1100): pthread_once';/../../../lib/libitkdouble-conversion-5.2.dll.a(d000136.o):(.text+0x0):首先在此处定义 c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libpthread.a(libwinpthread_la-thread.o):thread.c:(.text+0x1ac0): pthread_mutex_lock';/../../../lib/libitkdouble-conversion-5.2.dll.a(d000121.o):(.text+0x0):首先在此处定义 c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libpthread.a(libwinpthread_la-mutex.o):mutex.c:(.text+0x3a0):pthread_mutex_init';/../../../lib/libitkdouble-conversion-5.2.dll.a(d000120.o):(.text+0x0):首先在此处定义 c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libpthread.a(libwinpthread_la-mutex.o):mutex.c:(.text+0x570): 'pthread_mutex_destroy' 的多重定义;/../../../lib/libitkdouble-conversion-5.2.dll.a(d000119.o):(.text+0x0):首先在此处定义 collect2.exe:错误:ld 返回 1 退出状态 mingw32-make[5]: *** [模块\核心\通用\src\CMake文件\ITKCommon.dir\build.make:1772: bin/libITKCommon-5.2.dll] 错误 1 mingw32-make[4]:*** [CMakeFiles\Makefile2:5302:Modules/Core/Common/src/CMakeFiles/ITKCommon.dir/all] 错误 2 mingw32-make[3]: *** [Makefile:155: all] 错误 2 mingw32-make[2]:*** [CMakeFiles\ITK.dir\build.make:85:ep/src/ITK-stamp/ITK-build] 错误 2 mingw32-make[1]: *** [CMakeFiles\Makefile2:1082: CMakeFiles/ITK.dir/all] 错误 2 mingw32-make: *** [Makefile:145: all] 错误 2pthread_cond_timedwait'; ../../../../lib/libitkdouble-conversion-5.2.dll.a(d000091.o):(.text+0x0): first defined here c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libpthread.a(libwinpthread_la-thread.o):thread.c:(.text+0x14a0): multiple definition of pthread_self'; ../../../../lib/libitkdouble-conversion-5.2.dll.a(d000150.o):(.text+0x0): first defined here c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libpthread.a(libwinpthread_la-mutex.o):mutex.c:(.text+0x80): multiple definition of pthread_mutex_unlock'; ../../../../lib/libitkdouble-conversion-5.2.dll.a(d000124.o):(.text+0x0): first defined here c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libpthread.a(libwinpthread_la-mutex.o):mutex.c:(.text+0x520): multiple definition of

gcc pthreads 链接器错误 mingw-w64 itk

评论

0赞 M. Chinoune 12/15/2023
您可以直接从 MSYS2 packages.msys2.org/base/mingw-w64-itk 安装它,也可以自己构建它 github.com/msys2/MINGW-packages/tree/master/mingw-w64-itk

答:

1赞 Dženan 11/26/2022 #1

MinGW 既没有得到官方支持,也没有经过测试,因此它不起作用也就不足为奇了。欢迎为增加支持做出贡献

Microsoft 仅提供命令行编译器,而不需要 Visual Studio。与 MinGW 相比,Clang for Windows 的运气可能更好。

评论

0赞 atanu 11/26/2022
我之前看过 MS 构建工具并尝试下载,因为他们声称提供提供 msvc 环境的 cl.exe 。但不确定我们是否可以在没有购买许可证的情况下使用构建工具。我们可以在不购买的情况下使用构建工具吗?
0赞 Dženan 11/27/2022
我相信是这样:visualstudiomagazine.com/articles/2022/08/30/......关键引用:“VSBT 可用于从源代码编译开源 C++ 依赖项,而无需 Visual Studio 许可证,即使对于为企业从事商业或闭源项目的开发人员也是如此。
0赞 atanu 11/30/2022
非常感谢,我正在使用 VSBT 并且到目前为止它运行良好,即使是 clang 也让我很难使用 /MT /bigobj 标签 erros 编译源代码的几部分。