ARTICLE AD BOX
I got these errors when compling MC3D in msys2 MinGW64 on windows, which depends on OpenVolumeMesh(OVM), HexEx and other libraries .
My complie steps are as follows:
1、Generate OVM static library and installed it in C:\msys2\mingw64.
2、Generate HexEx share library and installed it in C:\msys2\mingw64, HexEx depend on OVM.
3、Complie MC3D whith pointing target paths of OpenVolumeMesh and HexEx.
Here are some Settings in my CMakelist.txt:
OVM/CMakelist.txt:
libHexEx/CMakelist.txt:
... find_package (OpenVolumeMesh REQUIRED PATHS "C:/msys2/mingw64/lib/cmake/OpenVolumeMesh") IF(TARGET OpenVolumeMesh::OpenVolumeMesh) message(STATUS "Found OpenVolumeMesh as imported target") ELSE() message(FATAL_ERROR "Did not find OpenVolumeMesh as imported target") ENDIF() ... add_library (HexEx SHARED ${SOURCES}) add_library (HexExStatic STATIC ${SOURCES}) target_link_libraries (HexEx PUBLIC OpenVolumeMesh::OpenVolumeMesh) target_link_libraries (HexExStatic PUBLIC OpenVolumeMesh::OpenVolumeMesh) ... mkdir ./build && cd ./build cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release - DCMAKE_INSTALL_PREFIX="C:/msys2/mingw64" .. make && make installMC3D/extern/TrulySeamless3D/src/CMakelist.txt:
# OVM if (NOT TARGET OpenVolumeMesh::OpenVolumeMesh) if(EXISTS "${PROJECT_SOURCE_DIR}/extern/OpenVolumeMesh/CMakeLists.txt") add_subdirectory(${PROJECT_SOURCE_DIR}/extern/OpenVolumeMesh extern/OpenVolumeMesh EXCLUDE_FROM_ALL) else() find_package(OpenVolumeMesh REQUIRED PATHS "C:/msys2/mingw64/lib/cmake/OpenVolumeMesh") endif() endif() if (TARGET OpenVolumeMesh::OpenVolumeMesh) message(STATUS "OpenVolumeMesh::OpenVolumeMesh target was successfully found!") else() message(FATAL_ERROR "FATAL: find_package(OpenVolumeMesh) failed to define target!") endif() list(APPEND TS3D_LIB_LIST OpenVolumeMesh::OpenVolumeMesh) # libhexex if (NOT TARGET HexEx::HexEx) if(EXISTS "${PROJECT_SOURCE_DIR}/extern/libHexEx/CMakeLists.txt") add_subdirectory(${PROJECT_SOURCE_DIR}/extern/libHexEx extern/libHexEx EXCLUDE_FROM_ALL) else() find_package(HexEx REQUIRED PATHS "C:/msys2/mingw64/lib/cmake/HexEx") endif() endif() if (TARGET HexEx::HexEx) message(STATUS "HexEx::HexEx target was successfully found!") else() message(FATAL_ERROR "FATAL: find_package(HexEx) failed to define target!") endif() ... target_link_libraries_system(TS3D PUBLIC ${TS3D_LIB_LIST})MC3D/src/CMakelist.txt:
if (NOT TARGET TS3D::TS3D) if(EXISTS "${PROJECT_SOURCE_DIR}/extern/TrulySeamless3D/CMakeLists.txt") if (CMAKE_BUILD_TYPE EQUAL "DEBUG") option(TRULYSEAMLESS_ENABLE_LOGGING "" ON) else() option(TRULYSEAMLESS_ENABLE_LOGGING "" OFF) endif() add_subdirectory(${PROJECT_SOURCE_DIR}/extern/TrulySeamless3D extern/TrulySeamless3D EXCLUDE_FROM_ALL) else() find_package(TS3D REQUIRED) endif() endif() list(APPEND MC3D_LIB_LIST TS3D::TS3D) ... add_library(MC3D ${MC3D_SOURCE_LIST}) add_library(MC3D::MC3D ALIAS MC3D) ... target_link_libraries_system(MC3D PUBLIC ${MC3D_LIB_LIST}) ... mkdir ./build && cd ./build cmake -G "MinGW Makefiles" -DMC3D_BUILD_CLI=Off -DMC3D_BUILD_TESTS=Off -DMC3D_ENABLE_LOGGING=Off -DHAVE_PTHREAD=true -DCMAKE_INSTALL_PREFIX="C:/msys2/mingw64" .. makeI got the output like follows:
[ 87%] Building CXX object src/CMakeFiles/MC3D.dir/Mesh/MCMeshProps.cpp.obj [ 90%] Building CXX object src/CMakeFiles/MC3D.dir/Mesh/TetMeshManipulator.cpp.obj [ 93%] Building CXX object src/CMakeFiles/MC3D.dir/Mesh/TetMeshNavigator.cpp.obj [ 96%] Building CXX object src/CMakeFiles/MC3D.dir/Mesh/TetMeshProps.cpp.obj [100%] Linking CXX shared library ..\Build\bin\libMC3D.dll C:/msys2/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/msys2/mingw64/lib/libOpenVolumeMesh.a(TopologyKernel.cc.obj):TopologyKernel:(.text+0x16d0): multiple definition of `OpenVolumeMesh::TopologyKernel::swap_cell_indices(OpenVolumeMesh::CH, OpenVolumeMesh::CH)'; ../Build/lib/libTS3D.dll.a(libTS3D_dll_d000499.o):(.text+0x0): first defined here C:/msys2/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/15.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/msys2/mingw64/lib/libOpenVolumeMesh.a(TopologyKernel.cc.obj):TopologyKernel:(.text+0x1ab0): multiple definition of `OpenVolumeMesh::TopologyKernel::swap_vertex_indices(OpenVolumeMesh::VH, OpenVolumeMesh::VH)'; ../Build/lib/libTS3D.dll.a(libTS3D_dll_d000504.o):(.text+0x0): first defined here ...