0
votes

I am able to use CGAL surface mesh parametrization with given examples easily. Which means that CGAL is installed properly and is functional. Ways to reproduce error:

  1. Create a empty main file
  2. Create a class file with appropriate modifications to CGAL square_border_parametrize.cpp
  3. After I do cmake . and make this is the output
    
    Scanning dependencies of target Main
    [ 33%] Building CXX object CMakeFiles/Main.dir/SBP.cpp.o
    :0:15: warning: missing whitespace after the macro name
    :0:15: warning: missing whitespace after the macro name
    [ 66%] Building CXX object CMakeFiles/Main.dir/main.cpp.o
    :0:15: warning: missing whitespace after the macro name
    :0:15: warning: missing whitespace after the macro name
    [100%] Linking CXX executable Main
    CMakeFiles/Main.dir/main.cpp.o: In function _mm_getcsr()':
    /usr/local/include/CGAL/Interval_nt.h:202: multiple definition ofCGAL::Surface_mesh_parameterization::get_error_message(int)'
    CMakeFiles/Main.dir/SBP.cpp.o:/usr/local/include/CGAL/Surface_mesh_parameterization/Error_code.h:53: first defined here
    collect2: error: ld returned 1 exit status
    CMakeFiles/Main.dir/build.make:450: recipe for target 'Main' failed
    make[2]: * [Main] Error 1
    CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/Main.dir/all' failed
    make[1]: * [CMakeFiles/Main.dir/all] Error 2
    Makefile:140: recipe for target 'all' failed
    make: *** [all] Error 2
    

I am not able to find any multiple definition for CGAL::Surface_mesh_parameterization::get_error_message(int). My CMakeLists.txt file looks like this:

cmake_minimum_required (VERSION 2.8 FATAL_ERROR)
PROJECT(LSCM)
FIND_PACKAGE( OpenCV REQUIRED )
find_package( PCL 1.7 REQUIRED COMPONENTS common io visualization filters )
find_package( CGAL QUIET COMPONENTS )
if ( NOT CGAL_FOUND )
  message(STATUS "This project requires the CGAL library, and will not be compiled.")
  return()  
endif()

include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

include( CGAL_CreateSingleSourceCGALProgram )

find_package( Boost REQUIRED )
if ( NOT Boost_FOUND )
  message(STATUS "This project requires the Boost library, and will not be compiled.")
  return()  
endif()

SET(CMAKE_BUILD_TYPE "Debug")
SET(LIBRARY_OUTPUT_PATH "./lib")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
file(GLOB SOURCE_FILES ./*.cpp)

ADD_EXECUTABLE(Main ${SOURCE_FILES})
TARGET_LINK_LIBRARIES(Main ${OpenCV_LIBS} ${PCL_LIBRARIES} ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} -lCGAL -lm ) 
install (TARGETS Main DESTINATION ~/bin)
1

1 Answers

0
votes

A quick fix: In the file include/CGAL/Surface_mesh_parameterization/Error_code.h write inline in front of const char* get_error_message(int error_code).

The fix is in this pull request, that is now merged in CGAL-4.12.