当前位置: 首页 > 知识库问答 >
问题:

无法使用stb_image

单于正业
2023-03-14

我正在做一个项目,我试图加载一个图像,以便将其用作纹理,但当我尝试包含stb_image时遇到了一个问题。

我把< code>stb_image.h放在< code > src/vendor/STB _ image/中,用

#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"

在文件中,并将文件放在<code>src/vendor/stb_image/</code>目录中。当我尝试包含<code>#include“vendor/stb_image/stb-image.h”

: && /usr/bin/c++  -Wall -Werror -std=c++++14 -g   CMakeFiles/opengl-learning.dir/src/Debug.cpp.o CMakeFiles/opengl-learning.dir/src/IndexBuffer.cpp.o CMakeFiles/opengl-learning.dir/src/Renderer.cpp.o CMakeFiles/opengl-learning.dir/src/Shader.cpp.o CMakeFiles/opengl-learning.dir/src/Texture.cpp.o CMakeFiles/opengl-learning.dir/src/VertexArray.cpp.o CMakeFiles/opengl-learning.dir/src/VertexBuffer.cpp.o CMakeFiles/opengl-learning.dir/src/main.cpp.o  -o opengl-learning  -lglfw /usr/lib64/libGLEW.so /usr/lib/x86_64-linux-gnu/libOpenGL.so /usr/lib/x86_64-linux-gnu/libGLX.so /usr/lib/x86_64-linux-gnu/libGLU.so && :
/usr/bin/ld: CMakeFiles/opengl-learning.dir/src/Texture.cpp.o: in function `Texture::Texture(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
/home/user/Documents/CPP-Stuff/OpenGL-Learning/src/Texture.cpp:5: undefined reference to `stbi_set_flip_vertically_on_load'
/usr/bin/ld: /home/user/Documents/CPP-Stuff/OpenGL-Learning/src/Texture.cpp:6: undefined reference to `stbi_load'
/usr/bin/ld: /home/user/Documents/CPP-Stuff/OpenGL-Learning/src/Texture.cpp:23: undefined reference to `stbi_image_free'
collect2: error: ld returned 1 exit status

这是我试图运行的代码,它利用了stb_image:

stbi_set_flip_vertically_on_load(1);                                        
m_LocalBuffer = stbi_load(path.c_str(), &m_Width, &m_Height, &m_BPP, 4);  

我已经尝试使用STB_IMAGE将< code > # define STB _ IMAGE _ IMPLEMENTATION 放入文件中,然后包含它,但是效果不是很好。比以前好多了,但是当我试着加载图片时,什么也没发生。我打印了一些图像数据

stbi_set_flip_vertically_on_load(1);                                        
m_LocalBuffer = stbi_load(path.c_str(), &m_Width, &m_Height, &m_BPP, 4);    
                                                              
std::cout << "m_BPP: " << m_BPP << " m_Width: " << m_Width << " m_Height: " << m_Height << std::endl;

它打印m_BPP:0 m_Width:0 m_Height:0(默认值,表示它没有加载任何内容)。m_LocalBuffer也是空的。我没有任何opengl错误或编译器错误,所以我不知道我做错了什么。我正在使用cmake和ninja来构建,如果这有什么帮助的话。cmake文件和我用于构建 build.sh 文件将包括在下面。

CmakeList:

cmake_minimum_required (VERSION 3.5)

if(POLICY CMP0072)
    cmake_policy(SET CMP0072 NEW)
else(NOT POLICY CMP0072)
    message(STATUS "Error")
endif(POLICY CMP0072)

project (opengl-learning)

find_package(PkgConfig REQUIRED)
pkg_search_module(GLFW REQUIRED glfw3)
include_directories(${GLFW_INCLUDE_DIRS} ${OPENGL_INCLUDE_DIR})

set (GCC_COVERAGE_LINK_FLAGS "-lglfw3 -pthread -ldl -lGLU -lGL -lrt -lXrandr -lXxf86vm -lXi -lXinerama -lX11 -lGLEW -lGLU -lGL")

add_definitions(${GCC_COVERAGE_COMPILE_FLAGS})

set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -std=c++14")
set (source_dir "${PROJECT_SOURCE_DIR}/src/")

file (GLOB source_files "${source_dir}/*.cpp")

add_executable (opengl-learning ${source_files})

find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)

target_link_libraries(opengl-learning ${GLFW_LIBRARIES} ${GLEW_LIBRARIES} ${OPENGL_LIBRARIES})

build.sh:

#!/bin/sh

cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Debug
ninja

我可以把我所有的代码放在github上,如果需要的话,我可以发送一个链接到repo。

共有1个答案

於意蕴
2023-03-14

包含stb方法实现的文件(< code > src/vendor/STB _ image/STB _ image . cpp )不是编译的一部分,这可以通过检查构建命令中提到的CPP文件来看出。

这样做的原因是cmake文件设置为仅编译src文件夹中的文件,而不是src/供应商/stb_image/文件夹中的文件。您必须添加这些文件才能将库的实现带入您的项目。

 类似资料:
  • 我正在写一份GCM申请。我无法将收到的邮件设置为文本视图。 检查以下代码: (错误msg: findViewById(int)方法未定义为new Runnable(){})

  • 我刚刚开始使用Spring,我正在尝试使用@NotBlank。问题是它不起作用。pom.xml我有以下依赖项: 这是我的进口: 我也得到了这个错误: 我搜索了类似的问题,答案是,通过添加此依赖项并重新启动IDE将起作用。就我而言,它仍然不起作用。有什么建议吗?

  • 当我尝试此代码时 我收到这条信息: 警告:无法修改标头信息-标头已由/home/httpd/vhosts/your-click.ch/httpdocs/wp-includes/formatting.php:4179中的/home/httpd/vhost/your-click.ch/httpdocs/wp-includess/pluggable发送。第925行的php警告:无法修改标头信息-标头已由

  • 看来我无法导入这个包:github。com/golang/protobuf/proto 当我尝试构建或使用go-get时,我得到:无法加载github。com/golang/protobuf/proto:github模块。com/golang/protobuf@latest(v1.3.2)找到,但不包含包github。com/golang/protobuf/proto 这是一个受欢迎的软件包,我很

  • 我基本上使用了install命令“$pip install Flask”,当我试图运行一个程序时,它会说“找不到模块”Flask安装在“/usr/local/lib/python2.7/site包”中,但我认为pip的意义在于,我可以到处导入这些包。我试图在我的桌面上运行一个文件,甚至当我将Flask文件夹移动到桌面上时,它也不起作用。有什么建议吗?谢谢

  • 我正在尝试使相机应用程序存储输出到我的内部存储。我还知道第三方应用程序不能访问我的应用程序的内部存储,但我们可以通过公开内部目录来做到这一点。我在这里遵循了指南: 相机意图不保存照片 https://developer.android.com/reference/android/support/v4/content/fileprovider.html 当我运行应用程序时,我可以得到以下Logcat