Échec de l’éditeur de liens: le membre de l’archive n’est pas un object

J’essaie de créer la bibliothèque Open CASCADE (6.7.1) avec mingw 64 bits sous Windows 7 (j’utilise x86_64-4.9.1-release-posix-seh-rt_v3-rev1 du projet mingw-w64 ).

En ce qui concerne la liaison, cela échoue avec une erreur et je n’ai aucune idée de ce qui pourrait mal se passer. La commande de l’éditeur de liens générée par cmake est:

"C:\Program Files (x86)\CMake\bin\cmake.exe" -E remove -f CMakeFiles\TKernel.dir/objects.a C:\msys64\mingw64\bin\ar.exe cr CMakeFiles\TKernel.dir/objects.a @CMakeFiles\TKernel.dir\objects1.rsp C:\msys64\mingw64\bin\g++.exe -shared -o ..\out\bin\libTKernel.dll -Wl,--out-implib,..\out\lib\libTKernel.dll.a -Wl,--major-image-version,0,--minor-image-version,0 -Wl,--whole-archive CMakeFiles\TKernel.dir/objects.a -Wl,--no-whole-archive -LC:\msys64\home\user\tcl8.5.16\build -LC:\msys64\home\user\freetype-2.5.3 -ladvapi32 -lgdi32 -luser32 -lkernel32 -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 

Et l’erreur produite:

 Linking CXX shared library ..\out\bin\libTKernel.dll CMakeFiles\TKernel.dir/objects.a: member CMakeFiles\TKernel.dir/objects.a(FSD_BinaryFile.cxx.obj) in archive is not an object collect2.exe: error: ld returned 1 exit status TKernel\CMakeFiles\TKernel.dir\build.make:11422: recipe for target 'out/bin/libTKernel.dll' failed 

Voici comment les fichiers sont compilés:

 Building CXX object TKernel/CMakeFiles/TKernel.dir/__/__/src/FSD/FSD_BinaryFile.cxx.obj cd /d TKernel && C:\msys64\mingw64\bin\g++.exe -DCSFDB -DTKernel_EXPORTS -DWNT -D_OCC64 -D_SCL_SECURE_NO_WARNINGS -MP -Wall -O3 -DNDEBUG -DNo_Exception @CMakeFiles/TKernel.dir/includes_CXX.rsp -MM -D__FSD_DLL -D__MMgt_DLL -D__OSD_DLL -D__Plugin_DLL -D__Quantity_DLL -D__Resource_DLL -D__SortTools_DLL -D__Standard_DLL -D__StdFail_DLL -D__Storage_DLL -D__TColStd_DLL -D__TCollection_DLL -D__TShort_DLL -D__Units_DLL -D__UnitsAPI_DLL -D__IncludeLibrary_DLL -D__Dico_DLL -D__NCollection_DLL -D__Message_DLL -o CMakeFiles\TKernel.dir\__\__\src\FSD\FSD_BinaryFile.cxx.obj -c ..\..\src\FSD\FSD_BinaryFile.cxx 

Si je vérifie le fichier objects.a avec nm , le contenu est .obj , mais “Format de fichier non reconnu” n’a pas l’air bien … mais je ne sais pas ce que cela signifie exactement …

 $ nm objects.a C:\msys64\mingw64\x86_64-w64-mingw32\bin\nm.exe: FSD_BinaryFile.cxx.obj: File format not recognized C:\msys64\mingw64\x86_64-w64-mingw32\bin\nm.exe: FSD_CmpFile.cxx.obj: File format not recognized ... 

Sortie de file commande de file :

 $ file objects.a objects.a: current ar archive $ file __/__/src/FSD/FSD_BinaryFile.cxx.obj __/__/src/FSD/FSD_BinaryFile.cxx.obj: ASCII text, with CRLF line terminators 

J’ai également essayé de supprimer l’option --whole-archive de la commande de l’éditeur de liens, mais cela entraîne une autre erreur:

 Linking CXX shared library ..\out\bin\libTKernel.dll CMakeFiles\TKernel.dir/objects.a: error adding symbols: Archive has no index; run ranlib to add one collect2.exe: error: ld returned 1 exit status 

Si je lance ranlib sur le fichier, cela n’aide en rien.

Toutes les idées sont appréciées.

edit: Ok, donc je suppose que le problème est causé par le drapeau -MM, utilisé pour la construction. Donc, il n’a pas vraiment compilé les fichiers, si je comprends bien.

Cependant, j’ai trouvé le projet OCE , qui est une sorte d’édition communautaire de OCC et il est tout à fait prêt à être utilisé, alors je vais utiliser cette version pour voir comment ça se passe …