在 Alpine 上与 MinGW 交叉编译时 StringCchPrintfW 的多重定义错误 linux
Multiple definition error of StringCchPrintfW when cross-compling with MinGW on Alpine linux
我正在 Alpine linux 上为 windows 与 MinGW 和 运行 交叉编译 opencascade 到 多重定义 linking StringCchPrintfW 错误。我已经成功地交叉编译和 link Ubuntu linux,没有错误,但是我不确定如何在 Alpine 上调试它,任何想法都会受到赞赏?输出结果如下:
Compiling test.exe
x86_64-w64-mingw32-g++ -O2 obj/geom_util.o-mingw obj/main.o-mingw
obj/util.o-mingw obj/error.o-mingw obj/geom.o-mingw obj/mesh.o-mingw
obj/shapemap.o-mingw obj/export.o-mingw obj/import.o-mingw
obj/gobj.o-mingw -L/usr/local/lib/opencascade-mingw -lTKSTEP
-lTKSTEP209 -lTKSTEPAttr -lTKSTEPBase -lTKIGES -lTKSTL -lTKXSBase
-lTKMesh -lTKOffset -lTKFillet -lTKBool -lTKBO -lTKShHealing -lTKPrim
-lTKTopAlgo -lTKGeomAlgo -lTKBRep -lTKGeomBase -lTKG3d -lTKG2d
-lTKMath -lTKernel -o test.exe -s -lws2_32 -lpsapi -static -lpthread
/usr/lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld:
/usr/lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libmingwex.a(lib64_libmingwex_a-strsafe.o):strsafe.c:(.text+0xbe3):
multiple definition of `StringCchPrintfW';
/usr/local/lib/opencascade-mingw/libTKernel.a(OSD_FileNode.cxx.o):OSD_FileNode.c:(.text$StringCchPrintfW[StringCchPrintfW]+0x0):
first defined here
collect2: error: ld returned 1 exit status
make: *** [Makefile:146: test.exe] Error 1
如错误所述:StringCchPrintfW
在 -lmingwex
中定义,然后在 OSD_FileNode.c
中重新定义。
您应该检查为什么会这样,看看是否可以删除 OSD_FileNode.c
的防御。
或者,也许您可以使用链接器标志 -Wl,-allow-multiple-definition
忽略此问题以允许继续构建。
我正在 Alpine linux 上为 windows 与 MinGW 和 运行 交叉编译 opencascade 到 多重定义 linking StringCchPrintfW 错误。我已经成功地交叉编译和 link Ubuntu linux,没有错误,但是我不确定如何在 Alpine 上调试它,任何想法都会受到赞赏?输出结果如下:
Compiling test.exe
x86_64-w64-mingw32-g++ -O2 obj/geom_util.o-mingw obj/main.o-mingw
obj/util.o-mingw obj/error.o-mingw obj/geom.o-mingw obj/mesh.o-mingw
obj/shapemap.o-mingw obj/export.o-mingw obj/import.o-mingw
obj/gobj.o-mingw -L/usr/local/lib/opencascade-mingw -lTKSTEP
-lTKSTEP209 -lTKSTEPAttr -lTKSTEPBase -lTKIGES -lTKSTL -lTKXSBase
-lTKMesh -lTKOffset -lTKFillet -lTKBool -lTKBO -lTKShHealing -lTKPrim
-lTKTopAlgo -lTKGeomAlgo -lTKBRep -lTKGeomBase -lTKG3d -lTKG2d
-lTKMath -lTKernel -o test.exe -s -lws2_32 -lpsapi -static -lpthread
/usr/lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld:
/usr/lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libmingwex.a(lib64_libmingwex_a-strsafe.o):strsafe.c:(.text+0xbe3):
multiple definition of `StringCchPrintfW';
/usr/local/lib/opencascade-mingw/libTKernel.a(OSD_FileNode.cxx.o):OSD_FileNode.c:(.text$StringCchPrintfW[StringCchPrintfW]+0x0):
first defined here
collect2: error: ld returned 1 exit status
make: *** [Makefile:146: test.exe] Error 1
如错误所述:StringCchPrintfW
在 -lmingwex
中定义,然后在 OSD_FileNode.c
中重新定义。
您应该检查为什么会这样,看看是否可以删除 OSD_FileNode.c
的防御。
或者,也许您可以使用链接器标志 -Wl,-allow-multiple-definition
忽略此问题以允许继续构建。