![错误:找不到 -lNrrdIO](https://linux22.com/image/1012105/%E9%94%99%E8%AF%AF%EF%BC%9A%E6%89%BE%E4%B8%8D%E5%88%B0%20-lNrrdIO.png)
我正在尝试在 Ubuntu 18.04 上安装 NrrdIO,以运行 Marching Cubes 来分割医学图像。这是我尝试运行它的链接。
http://web.cse.ohio-state.edu/research/graphics/isotable/
我正在尝试安装 ijkmcube-v0-3-3.tar,它需要 ITKNrrdIO.a 库。我遇到了这个错误:
[ 7%] Linking CXX executable ijkmcube
/usr/bin/ld: cannot find -lNrrdIO
collect2: error: ld returned 1 exit status
CMakeFiles/ijkmcube.dir/build.make:406: recipe for target 'ijkmcube' failed
make[2]: *** [ijkmcube] Error 1
CMakeFiles/Makefile2:131: recipe for target 'CMakeFiles/ijkmcube.dir/all' failed
make[1]: *** [CMakeFiles/ijkmcube.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2
我已经安装了 NrrdIO 1.11.0,也尝试了 NrrdIO 1.9.0,但在运行 make 时我总是遇到此错误,因为某种原因它无法找到 lNrrdIO 。有人可以帮忙吗?谢谢
编辑:
我认为这是一个链接问题,但是当我将 NrrdIO 文件复制到 /usr/bin 并修改符号链接时,出现以下错误:
[ 7%] Linking CXX executable ijkmcube
collect2: fatal error: cannot find 'ld'
compilation terminated.
CMakeFiles/ijkmcube.dir/build.make:406: recipe for target 'ijkmcube'
failed
make[2]: *** [ijkmcube] Error 1
CMakeFiles/Makefile2:131: recipe for target '
CMakeFiles/ijkmcube.dir/all' failed
make[1]: *** [CMakeFiles/ijkmcube.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2
有人能帮忙吗?谢谢
答案1
问题最终得以解决,在俄亥俄州立大学Wenger博士的帮助下,他建议对NrrdIO 1.11.0版本的CMakeLists做2处修改,将值设为QNANHABIT
1,并取消注释该行。ADD_DEFINITIONS(-DTEEM_ZLIB=1)
我附上了修改后的CMakeLists文件以供参考:
# NrrdIO: stand-alone code for basic nrrd functionality
# Copyright (C) 2011, 2010, 2009 University of Chicago
# Copyright (C) 2008, 2007, 2006, 2005 Gordon Kindlmann
# Copyright (C) 2004, 2003, 2002, 2001, 2000, 1999, 1998 University of Utah
#
# This software is provided 'as-is', without any express or implied
# warranty. In no event will the authors be held liable for any
# damages arising from the use of this software.
#
# Permission is granted to anyone to use this software for any
# purpose, including commercial applications, and to alter it and
# redistribute it freely, subject to the following restrictions:
#
# 1. The origin of this software must not be misrepresented; you must
# not claim that you wrote the original software. If you use this
# software in a product, an acknowledgment in the product
# documentation would be appreciated but is not required.
#
# 2. Altered source versions must be plainly marked as such, and must
# not be misrepresented as being the original software.
#
# 3. This notice may not be removed or altered from any source distribution.
#
CMAKE_MINIMUM_REQUIRED(VERSION 2.4)
PROJECT(NrrdIO)
INCLUDE_REGULAR_EXPRESSION("^.*.h$")
#
# This CMake file configures the NrrdIO library build. NrrdIO
# is used by Insight/Code/IO/itkNrrdIO for reading/writing
# "Nearly Raw Raster Data" within the open-source Teem software
# package. See http://teem.sourceforge.net for more information.
#
SET(nrrdio_SRCS comment.c enumsNrrd.c mop.c string.c 754.c defaultsNrrd.c
parseAir.c dio.c format.c parseNrrd.c formatEPS.c encoding.c
formatNRRD.c encodingAscii.c formatPNG.c encodingBzip2.c
formatPNM.c accessors.c encodingGzip.c formatText.c
array.c encodingHex.c formatVTK.c read.c arraysNrrd.c encodingRaw.c
gzio.c reorder.c write.c axis.c endianAir.c keyvalue.c
biffbiff.c biffmsg.c endianNrrd.c methodsNrrd.c sane.c enum.c
miscAir.c simple.c )
# Turn on TEEM_BUILD so that the proper dll export def's are
# used on windows builds.
ADD_DEFINITIONS(-DTEEM_BUILD=1)
#The QNANHIBIT variable is configured by the root level CMakeLists.txt
IF(QNANHIBIT)
ADD_DEFINITIONS(-DTEEM_QNANHIBIT=1)
ELSE(QNANHIBIT)
ADD_DEFINITIONS(-DTEEM_QNANHIBIT=1)
ENDIF(QNANHIBIT)
#DirectIO is the fast way to do multi-gigabyte I/O and currently only available
#for SGI platforms. Use of DirectIO is enabled manually for now.
#OPTION(USE_DIRECTIO "Use DirectIO for Nrrd file IO. Only valid on SGI systems." 0)
#MARK_AS_ADVANCED(USE_DIRECTIO)
#IF(USE_DIRECTIO)
# ADD_DEFINITIONS(-DTEEM_DIO=1)
#ELSE(USE_DIRECTIO)
ADD_DEFINITIONS(-DTEEM_DIO=0)
#ENDIF(USE_DIRECTIO)
# Possibly turn on usage of zlib compression (requires linking with libz)
# (i.e., programs compiled with ITKNrrdIO must also be compiled with zlib)
ADD_DEFINITIONS(-DTEEM_ZLIB=1)
ADD_LIBRARY(NrrdIO ${nrrdio_SRCS} )
## These are ITK-specific
#TARGET_LINK_LIBRARIES(NrrdIO ${ITK_ZLIB_LIBRARIES} )
#INSTALL_TARGETS(/lib/InsightToolkit ITKNrrdIO)
#INSTALL_FILES(/include/InsightToolkit/Utilities/NrrdIO "(\\.h)$")