运行libpng应用程序时出现运行时错误

时间:2019-12-17 16:08:53

标签: c++ cmake

我正在尝试编译包含“ png.h”头文件的openGL文件

我遇到以下错误:

Open GL version 2.1 ATI-3.2.24
libpng warning: Application built with libpng-1.4.12 but running with 1.6.37
error: png_create_read_struct returned 0.
Failed to read image texture from ../images/ceramic.png

我的Cmakelists.txt文件:

cmake_minimum_required (VERSION 3.13)
project (teapot)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED)
find_package(PNG REQUIRED)

include_directories(${PNG_INCLUDE_DIR})

add_executable(teapot teapot.cpp)

target_link_libraries(teapot ${OPENGL_gl_LIBRARY}  ${GLUT_LIBRARIES} ${PNG_LIBRARIES} )
set(CMAKE_CXX_FLAGS "-I ${CMAKE_OSX_SYSROOT} ${CMAKE_CXX_FLAGS} -std=c++11")


if (APPLE)
  set (CMAKE_CXX_FLAGS "-Wno-deprecated-declarations ${CMAKE_CXX_FLAGS}")
endif ()

set_target_properties(teapot PROPERTIES
    CXX_STANDARD 11
    CXX_STANDARD_REQUIRED YES
    CXX_EXTENSIONS NO
)

cmake。工作正常,但是当我执行./teapot时发生了上述错误。感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可能只为libpng-1.4.12安装了开发库,而没有为libpng-1.6.37或其他“非标准”安装安装了开发库。

但是消息似乎很清楚,您链接到一个较旧的版本,但在可装入库的运行时路径中具有一个较新的版本。

find_package(PNG REQUIRED)仅通过find_library()搜索“标准”位置。

您可能还希望将CMakeLists.txt文件更新为使用target_link_libraries( ... PNG::PNG)。这比尝试使用设置的PNG变量要简单。编译项目时缺少PNG_DEFINITIONS。有关库目标,请参阅CMake手册buildsystem部分。

您可以使用message()命令检查变量以打印出它们的值。其中一些也将存储在CMakeCache.txt中。

如果libpng不在标准位置,则必须使用target_link_libraries( ... /path/to/lib)target_include_directories( ... /path/to/lib/headers)等来处理。