2017-02-09 25 views
0

я получил некоторые из этих ошибок при компиляции на Ubuntu 16.04.1,Как решить «неопределенные ссылки на»

Linking CXX executable ../lib/Slicer-4.7/cli-modules/abcd 
    /path/to/SimpleITK/SimpleITK-build/SimpleITK-build/lib/libSimpleITKBasicFilters1-0.11.so.1: undefined reference to `itk::ImageToImageFilter<itk::Image<int, 2u>, itk::Image<int, 2u> >::PushFrontInput(itk::DataObject const*)' 

ли это undefined reference to означает SimpleITK не связан? Ниже мой Cmakelist:

cmake_minimum_required(VERSION 2.8.8) 

#----------------------------------------------------------------------------- 
set(MODULE_NAME "abcd") 

#----------------------------------------------------------------------------- 
set(MODULE_HOMEPAGE "${_EXT_HOMEPAGE}") 
set(MODULE_CATEGORY "${_EXT_CATEGORY}") 
set(MODULE_CONTRIBUTORS "abc") 
set(MODULE_DESCRIPTION "abc") 
set(MODULE_ACKNOWLEDGEMENTS "${_EXT_ACKNOWLEDGEMENTS}") 
set(MODULE_LICENSE_SHORT_DESCRIPTION "${MODULE_LICENSE_SHORT_DESCRIPTION}") 
set(MODULE_MAJOR_VERSION "${_EXT_MAJOR_VERSION}") 
set(MODULE_MINOR_VERSION "${_EXT_MINOR_VERSION}") 
set(MODULE_PATCH_VERSION "${_EXT_PATCH_VERSION}") 

# Configure XML description 
configure_file(
    ${MODULE_NAME}.xml.in 
    ${CMAKE_CURRENT_BINARY_DIR}/${MODULE_NAME}.xml 
    @ONLY 
) 

#----------------------------------------------------------------------------- 
set(MODULE_INCLUDE_DIRECTORIES 
) 

set(MODULE_SRCS 
) 

set(MODULE_TARGET_LIBRARIES 
    ${ITK_LIBRARIES} ${SimpleITK_LIBRARIES} 
) 

#----------------------------------------------------------------------------- 
SEMMacroBuildCLI(
    NAME ${MODULE_NAME} 
    TARGET_LIBRARIES ${MODULE_TARGET_LIBRARIES} 
    INCLUDE_DIRECTORIES ${MODULE_INCLUDE_DIRECTORIES} 
    ADDITIONAL_SRCS ${MODULE_SRCS} 
) 

#----------------------------------------------------------------------------- 
if(BUILD_TESTING) 
    add_subdirectory(Testing) 
endif() 

Но как вы можете видеть, у меня есть цель подключаемой библиотека SimpleITK и ITK, и что модуль ломтерезки отлично работает в ломтерезках 4.4 версии, но после обновления среза до 4.7, это делает не работа. Кто-нибудь знает, как это исправить, или дать мне подсказку? Любая помощь оценивается.

ответ

1

Там может быть проблема с внутренним кодированием зависимостей в SimpleITK с версией Slicer является использованием изменения:

set(MODULE_TARGET_LIBRARIES 
    ${ITK_LIBRARIES} ${SimpleITK_LIBRARIES} 
) 

к:

set(MODULE_TARGET_LIBRARIES 
    ${SimpleITK_LIBRARIES} ${SimpleITK_LIBRARIES} ${ITK_LIBRARIES} 
) 

Я считаю, что последующее исправление в SimpleITK будут рассмотрены проблема: https://github.com/SimpleITK/SimpleITK/commit/6fc22492ca1fd3ebb493160b7968c37a0a6f1986

+0

Спасибо! Я попробую это – MMzztx

+0

Кажется, что это не работает, есть ли у вас какая-либо другая идея? Большое спасибо – MMzztx

+0

Еще одна вещь, которую нужно попробовать - это превратить общие библиотеки SimpleITK: https://github.com/Slicer/Slicer/blob/master/SuperBuild/External_SimpleITK.cmake#L68 Если это не работает, то «-DSITK_EXPLICIT_INSTANTIATION: BOOL = 0 "- это последнее, что нужно попробовать. – blowekamp

1

Ваша проблема связана с внутренней несогласованностью SimpleITK. А именно, какая-то часть libSimpleITKBasicFilters1-0.11.so.1 ожидает, что PushFrontInput будет определен в другом месте, когда он, вероятно, должен был быть экспортирован из (или, по крайней мере, определен) в эту библиотеку.

Редактировать: Slicer 4.7 - это текущая версия разработки и, следовательно, нестабильна. Попробуйте 4.6.2, который является последним стабильным выпуском.

+0

Благодарим за ответом – MMzztx