提问人:atanu 提问时间:11/26/2022 更新时间:11/26/2022 访问量:67
无法在 gcc / mingw 10 * 上构建 ITK 5.* 版本 - Pthread 链接错误/ windows10
Unable to Build ITK 5.* version on gcc / mingw 10 * - Pthread linking error/ windows10
问:
我正在尝试从源代码编译 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
答:
MinGW 既没有得到官方支持,也没有经过测试,因此它不起作用也就不足为奇了。欢迎为增加支持做出贡献。
Microsoft 仅提供命令行编译器,而不需要 Visual Studio。与 MinGW 相比,Clang for Windows 的运气可能更好。
评论