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

Runtime error when running libpng application

本文关键字:运行时错误 libpng 应用程序 运行      更新时间:2023-10-16

我正在尝试编译包括"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

我的文件.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 时发生了上述错误。感谢您的任何帮助!

您可能只为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),等等来处理它。