在用于构建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?
答案 0 :(得分:0)
看起来我无法用cmake做任何事情,问题来自我正在链接的库(Cairo和ImageMagick)。
在已部署的系统上存在两个libpng依赖项的原因是我正在部署预构建的ImageMagick(静态),它构建在具有libpng12
的计算机上。我假设部署系统将具有Cairo和libpng,并且确实如此,但它没有libpng12
。它有libpng15
和开罗,它正在联系它。因此,ldd
表明我的可执行文件依赖于libpng12和libpng15。
要解决此问题,我会静态链接libpng12
以及任何链接它的库。