1

在用于构建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 文件。我的可执行文件静态链接到配置为使用 libPNG 的 ImageMagick。

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?

4

1 回答 1

0

看起来我对 cmake 无能为力,问题来自我链接的库(Cairo 和 ImageMagick)。

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

为了解决这个问题,我静态链接libpng12到任何链接它的库。

于 2013-08-05T12:21:55.697 回答