【问题标题】:Cannot find a link library (lNrrdIO)找不到链接库 (lNrrdIO)
【发布时间】:2019-03-13 17:42:23
【问题描述】:

我正在尝试在 Ubuntu 18.04 上安装 NrrdIO,以运行 Marching Cubes 来分割医学图像。这是我尝试运行它的链接。

http://web.cse.ohio-state.edu/research/graphics/isotable/

我正在尝试安装需要 ITKNrrdIO.a 库的 ijkmcube-v0-3-3.tar。我遇到了这个错误:

[  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,但在运行时 制作 我总是遇到这个错误,由于某种原因它无法找到 lNrrdIO 。有人可以帮忙吗? 谢谢

编辑:

我认为是链接的问题,但是当我将 NrrdIO.a 文件复制到 /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

有人可以帮忙吗?谢谢

编辑 2

PROJECT(IJKMCUBE)

#---------------------------------------------------------

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

IF (NOT DEFINED ${IJK_DIR})
 GET_FILENAME_COMPONENT(IJK_ABSOLUTE_PATH "../.." ABSOLUTE)
 SET(IJK_DIR ${IJK_ABSOLUTE_PATH} CACHE PATH "IJK directory")
ENDIF (NOT DEFINED ${IJK_DIR})

SET(CMAKE_INSTALL_PREFIX "${IJK_DIR}/")
SET(LIBRARY_OUTPUT_PATH ${IJK_DIR}/lib CACHE PATH "Library directory")
SET(IJKMCUBE_DIR "src/ijkmcube")
SET(NRRD_LIBDIR "${IJK_DIR}/lib")
SET(IJK_ISOTABLE_DIR "${IJK_DIR}/isotable" CACHE PATH "Isotable 
 directory")

#---------------------------------------------------------

IF (NOT CMAKE_BUILD_TYPE)
 SET (CMAKE_BUILD_TYPE Release CACHE STRING 
   "Default build type: Release" FORCE)
ENDIF (NOT CMAKE_BUILD_TYPE)

INCLUDE_DIRECTORIES("${IJK_DIR}/include")
LINK_DIRECTORIES("${NRRD_LIBDIR}")
LINK_LIBRARIES(expat NrrdIO z)
ADD_DEFINITIONS(-DIJK_ISOTABLE_DIR=\"${IJK_ISOTABLE_DIR}\")

ADD_EXECUTABLE(ijkmcube ijkmcube_main.cxx ijkmcubeIO.cxx ijkmcube.cxx 
                    ijkmcube_datastruct.cxx ijkmcube_sub.cxx 
                    ijkmcube_extract.cxx ijkmcube_util.cxx 
                    ijksnapmc.cxx 
                    ijktable.cxx ijktable_poly.cxx ijktable_ambig.cxx
                    ijkoctree.cxx ijkxitIO.cxx)

 ADD_LIBRARY(ijkmcubeL STATIC EXCLUDE_FROM_ALL ijkmcubeIO.cxx 
             ijkmcube.cxx ijkmcube_datastruct.cxx ijkmcube_sub.cxx 
             ijkmcube_extract.cxx ijkmcube_util.cxx ijksnapmc.cxx 
             ijktable.cxx ijkoctree.cxx ijkxitIO.cxx)
SET_TARGET_PROPERTIES(ijkmcubeL PROPERTIES OUTPUT_NAME ijkmcube)
ADD_CUSTOM_TARGET(lib DEPENDS ijkmcubeL)

SET(CMAKE_INSTALL_PREFIX ${IJK_DIR})
INSTALL(TARGETS ijkmcube DESTINATION "bin/linux")

ADD_CUSTOM_TARGET(tar WORKING_DIRECTORY ../.. COMMAND tar cvfh 
${IJKMCUBE_DIR}/ijkmcube.tar ${IJKMCUBE_DIR}/README 
${IJKMCUBE_DIR}/INSTALL ${IJKMCUBE_DIR}/RELEASE_NOTES 
${IJKMCUBE_DIR}/*.cxx ${IJKMCUBE_DIR}/*.h ${IJKMCUBE_DIR}/*.txx 
${IJKMCUBE_DIR}/CMakeLists.txt ${IJKMCUBE_DIR}/man/* 
${IJKMCUBE_DIR}/ijkmcube_doxygen.config)

ADD_CUSTOM_TARGET(doc COMMAND doxygen ijkmcube_doxygen.config)

已解决

Tsyvarev 解决了这个问题,libNrrdIO.a 文件必须复制到 /usr/lib/。具体解参考cmets

【问题讨论】:

  • 错误是关于ld 无法找到您的NrrdIO 库。该库的绝对路径是什么? (您需要安装此库,因此应出现NrrdIO.a 之类的库文件)。
  • 是的,我得到 lNrrdIO.a 并使用 sudo ln -sfn /usr/bin/lNrrdIO.a ld 链接它。但后来我得到了第二个错误。
  • ld 是一个链接器NrrdIO.a 是一个。没有必要让其中一个成为另一个链接。 NrrdIO.a 文件的原始位置是什么?
  • NrrdIo.a 文件的原始位置在我的下载文件夹中,我在其中运行了ccmake .cmake .makemake install。在将 ld 复制到 /usr/bin/ 之后,我试图让 ld 指向 NrrdIO.a。不应该这样吗?
  • 目录/usr/bin 包含可执行文件,而不是。在库的标准目录中,有一个,例如,/usr/lib

标签: makefile cmake symlink


【解决方案1】:

此答案由@Tsyvarev 给出:

通过创建一个名为 ld 的链接,您将删除原始链接器 (ld)。没有链接器,您绝对无法构建任何库。您需要创建一个名为lNrrdIO.a 的链接,这样它将指向实际的库位置:sudo ln -sfn /home/subham/Downloads/NrrdIO-1.9.0-src/lNrrdIO.a lNrrdIO.a(从/usr/lib 目录运行此命令)。并恢复原/usr/bin/ld文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    相关资源
    最近更新 更多