Hello everyone,

I am currently trying to compile a project using OTB 4.4.0 and Boost, and 
it seems impossible to link the project with OTB and Boost. The error 
message is:
Linking CXX executable bin/BaatzSegmentation
CMakeFiles/BaatzSegmentation.dir/apps/BaatzSegmentation.cxx.o:(.rodata.
_ZTVN5boost15program_options20invalid_option_valueE[
_ZTVN5boost15program_options20invalid_option_valueE]+0x20): undefined 
reference to `boost::program_options::validation_error::what() const'
CMakeFiles/BaatzSegmentation.dir/apps/BaatzSegmentation.cxx.o: In function `
std::basic_string<char, std::char_traits<char>, std::allocator<char> > const
& boost::program_options::validators::get_single_string<char>(std::vector<
std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std
::allocator<std::basic_string<char, std::char_traits<char>, std::allocator
<char> > > > const&, bool)':
BaatzSegmentation.cxx:(.text._ZN5boost15program_options10validators17get_single_stringIcEERKSbIT_St11char_traitsIS3_ESaIS3_EERKSt6vectorIS7_SaIS7_EEb[_ZN5boost15program_options10validators17get_single_stringIcEERKSbIT_St11char_traitsIS3_ESaIS3_EERKSt6vectorIS7_SaIS7_EEb]+0xde):
 
undefined reference to 
`boost::program_options::validation_error::validation_error(boost::program_options::validation_error::kind_t,
 
std::string const&, std::string const&)'
BaatzSegmentation.cxx:(.text.
_ZN5boost15program_options10validators17get_single_stringIcEERKSbIT_St11char_traitsIS3_ESaIS3_EERKSt6vectorIS7_SaIS7_EEb
[
_ZN5boost15program_options10validators17get_single_stringIcEERKSbIT_St11char_traitsIS3_ESaIS3_EERKSt6vectorIS7_SaIS7_EEb
]+0x184): undefined reference to 
`boost::program_options::validation_error::validation_error(boost::program_options::validation_error::kind_t,
 
std::string const&, std::string const&)'
CMakeFiles/BaatzSegmentation.dir/apps/BaatzSegmentation.cxx.o:(.rodata._ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_15program_options16validation_errorEEEEE[_ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_15program_options16validation_errorEEEEE]+0x20):
 
undefined reference to `boost::program_options::validation_error::what() 
const'
CMakeFiles/BaatzSegmentation.dir/apps/BaatzSegmentation.cxx.o:(.rodata._ZTVN5boost16exception_detail19error_info_injectorINS_15program_options16validation_errorEEE[_ZTVN5boost16exception_detail19error_info_injectorINS_15program_options16validation_errorEEE]+0x20):
 
undefined reference to `boost::program_options::validation_error::what() 
const'
CMakeFiles/BaatzSegmentation.dir/apps/BaatzSegmentation.cxx.o:(.rodata.
_ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_15program_options20invalid_option_valueEEEEE
[
_ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_15program_options20invalid_option_valueEEEEE
]+0x20): undefined reference to 
`boost::program_options::validation_error::what() 
const'
CMakeFiles/BaatzSegmentation.dir/apps/BaatzSegmentation.cxx.o:(.rodata._ZTVN5boost16exception_detail19error_info_injectorINS_15program_options20invalid_option_valueEEE[_ZTVN5boost16exception_detail19error_info_injectorINS_15program_options20invalid_option_valueEEE]+0x20):
 
undefined reference to `boost::program_options::validation_error::what() 
const'
collect2: error: ld returned 1 exit status
CMakeFiles/BaatzSegmentation.dir/build.make:224: recipe for target 'bin/
BaatzSegmentation' failed
make[2]: *** [bin/BaatzSegmentation] Error 1
CMakeFiles/Makefile2:60: recipe for target 'CMakeFiles/BaatzSegmentation.dir
/all' failed
make[1]: *** [CMakeFiles/BaatzSegmentation.dir/all] Error 2
Makefile:75: recipe for target 'all' failed
make: *** [all] Error 2


The content of the CMakeLists.txt file is:
PROJECT(LSS)
cmake_minimum_required(VERSION 2.8)

FIND_PACKAGE(OTB)
IF(OTB_FOUND)
  INCLUDE(${OTB_USE_FILE})
ELSE(OTB_FOUND)
  MESSAGE(FATAL_ERROR
    "Cannot build OTB project without OTB. Please set OTB_DIR.")
ENDIF(OTB_FOUND)

set(Boost_USE_STATIC_LIBS        OFF)
set(Boost_USE_MULTITHREADED      ON)
set(Boost_USE_STATIC_RUNTIME     OFF)
set(BOOST_ALL_DYN_LINK           ON)
find_package(Boost COMPONENTS program_options REQUIRED)
if(Boost_PROGRAM_OPTIONS_FOUND)
    INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
    LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
    message(STATUS "program_options not found ${Boost_LIBRARIES}")
else()
    message(FATAL_ERROR "program_options not found")
endif()

add_executable(main main.cpp)
target_link_libraries(main ${Boost_PROGRAM_OPTIONS_LIBRARY})

#Check compiler version
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
    # require at least gcc 4.8
    if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
        message(FATAL_ERROR "GCC version must be at least 4.8!")
    endif()
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
    # require at least clang 3.2
    if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.2)
        message(FATAL_ERROR "Clang version must be at least 3.2!")
    endif()
else()
    message(WARNING "You are using an unsupported compiler! Compilation has 
only been tested with Clang and GCC.")
endif()

include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
if(COMPILER_SUPPORTS_CXX11)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fpermissive")
else()
        message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 
support. Please use a different C++ compiler.")
endif()

set(EXECUTABLE_OUTPUT_PATH bin)

file(
    GLOB_RECURSE
    HEADERS
    "src/*.h"
)

file(
    GLOB_RECURSE
    TEMPLATES
    "src/*.txx"
)

file(
    GLOB_RECURSE
    SOURCES
    "src/*.cxx"
)

set(LSSS_INCLUDE_DIRS "")
foreach(_headerFile ${HEADERS})
    get_filename_component(_dir ${_headerFile} PATH)
    list(APPEND LSSS_INCLUDE_DIRS ${_dir})
endforeach()

foreach(_templateFile ${TEMPLATES})
    get_filename_component(_dir ${_templateFile} PATH)
    list(APPEND LSSS_INCLUDE_DIRS ${_dir})
endforeach()

list(REMOVE_DUPLICATES LSSS_INCLUDE_DIRS)

include_directories(${LSSS_INCLUDE_DIRS})

ADD_EXECUTABLE(
     TiledBaatzSegmentation
    apps/TiledBaatzSegmentation.cxx
    ${SOURCES}
)

TARGET_LINK_LIBRARIES(TiledBaatzSegmentation ${Boost_PROGRAM_OPTIONS_LIBRARY
} OTBCommon OTBIO )

ADD_EXECUTABLE(
     TiledFLSASegmentation
    apps/TiledFLSASegmentation.cxx
    ${SOURCES}
)

TARGET_LINK_LIBRARIES(TiledFLSASegmentation ${Boost_PROGRAM_OPTIONS_LIBRARY} 
OTBCommon OTBIO)

ADD_EXECUTABLE(
     BaatzSegmentation
    apps/BaatzSegmentation.cxx
    ${SOURCES}
)

TARGET_LINK_LIBRARIES(BaatzSegmentation ${Boost_PROGRAM_OPTIONS_LIBRARY} 
OTBCommon OTBIO)

ADD_EXECUTABLE(
     FLSASegmentation
    apps/FLSASegmentation.cxx
    ${SOURCES}
)

TARGET_LINK_LIBRARIES(FLSASegmentation ${Boost_PROGRAM_OPTIONS_LIBRARY} 
OTBCommon OTBIO)

I've created a minimal project using only the Boost library and it compiled 
successfuly, so the problem seems to be related to OTB.

Do you have some advices to help me?

Rémy

-- 
-- 
Check the OTB FAQ at
http://www.orfeo-toolbox.org/FAQ.html

You received this message because you are subscribed to the Google
Groups "otb-users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/otb-users?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"otb-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to