2017-02-09 62 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與版本切片機使用 更改一個問題:

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,因爲它可能應該從該庫中導出(或至少定義在該庫中)。

編輯:切片機4.7是當前的開發版本,因此不穩定。試試4.6.2這是最新的穩定版本。

+0

感謝您的回覆 – MMzztx