我正在Alpine linux上用MinGW为windows交叉编译opencascade,并遇到StringCchPrintfW的多重定义链接错误。我已经成功地将其与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
忽略这一点,以允许构建继续进行。