我正在尝试编译包含“ 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时发生了上述错误。感谢您的帮助!
答案 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)
等来处理。