Cmake:libpng不能在另一台机器上正确动态链接

时间:2013-08-01 19:29:24

标签: unix linker dependencies cmake libpng

在用于构建sc实用程序的Ubuntu 13.04 VM上,依赖关系如下所示:

$ ldd sc | grep -i png
    libpng12.so.0 => /lib/i386-linux-gnu/libpng12.so.0 (0xb75c2000)

在我的Fedora VM上,sc实用程序未正确链接libpng。它有libpng15,但它试图链接到libpng12:

$ ldd sc | grep -i png
    libpng12.so.0 => not found
    libpng15.so.15 => /lib/libpng15.so.15 (0xb6f40000)

我正在使用cmake来构建我的可执行文件,而我正在使用默认的FindPNG cmake文件。我的可执行文件静态链接到ImageMagick,ImageMagick配置为使用libPNG。

find_package(ImageMagick COMPONENTS MagickWand MagickCore REQUIRED)
find_package(ZLIB)
find_package(Threads)
find_package(JPEG)
find_package(PNG)
find_package(LibLZMA)
find_package(OpenMP)
find_package(Cairo)

include_directories(${ImageMagick_INCLUDE_DIRS})
include_directories(${CAIRO_INCLUDE_DIRS})

target_link_libraries(sc
  ${LIBCAIRO}
  ${ImageMagick_LIBRARIES}
  ${JPEG_LIBRARIES}
  ${PNG_LIBRARIES}
  ${LIBLZMA_LIBRARIES}
  ${ZLIB_LIBRARIES}
  ${CMAKE_THREAD_LIBS_INIT}
  ${X11_LIBRARIES}
  ${OpenMP_LIB}
  )

我已经尝试将自己的FindPNG cmake作为目标libpng.so。我仍然得到相同的结果...

有没有办法让我的可执行文件链接到用户机器上的libpng?

1 个答案:

答案 0 :(得分:0)

看起来我无法用cmake做任何事情,问题来自我正在链接的库(Cairo和ImageMagick)。

在已部署的系统上存在两个libpng依赖项的原因是我正在部署预构建的ImageMagick(静态),它构建在具有libpng12的计算机上。我假设部署系统将具有Cairo和libpng,并且确实如此,但它没有libpng12。它有libpng15和开罗,它正在联系它。因此,ldd表明我的可执行文件依赖于libpng12和libpng15。

要解决此问题,我会静态链接libpng12以及任何链接它的库。