关于MNN框架读取图片遇到的问题:undefined reference to `stbi_load‘

遇到undefined reference to ‘stbi_load’ 这种问题一般都是使用了某些未定义的函数,说明这个函数没有被定义到。

项目情况是要在安卓平台用MNN执行模型推理,安卓平台不可能放下opencv那么大的库,所以不能用opencv进行读取图片,所以参考了MNN提供的demo进行图片读取。

参考MNN-master\demo\exec\pictureRecognition.cpp所写出的问题代码如下:

#include "stb_image.h"
......
int width, height, channel;
auto inputImage = stbi_load("../1.png", &width, &height, &channel, 3);

这个就是读取图片的关键代码,可以看到:

stbi_load声明代码在376行
在这里插入图片描述

stbi_load定义代码在1221行
关于MNN框架读取图片遇到的问题:undefined reference to `stbi_load‘_第1张图片
CMakeLists.txt代码: 已经包含了MNN-master/3rd_party/imageHelper 作为引用目录

cmake_minimum_required(VERSION 3.0)
project(hfnet)
# using C++11
set( CMAKE_CXX_FLAGS "-std=c++11 ")
#
find_package(OpenCV REQUIRED)
# 
include_directories( ${OpenCV_INCLUDE_DIRS}  "/home/cdl/software/MNN-master/include" "/home/cdl/software/MNN-master/3rd_party/imageHelper")
link_directories( "/home/cdl/MNN-master/build" "/usr/lib/x86_64-linux-gnu")
#
add_executable(hfnet main.cpp)
#
target_link_libraries( hfnet MNN ${OpenCV_LIBS})

#message("${OpenCV_INCLUDE_DIRS}")
#message("${OpenCV_LIBS}")

解决方式:

和参考的demo一步步对比,最后验证出来是少了一个
#define STB_IMAGE_IMPLEMENTATION
再次进入stb_image.h搜索STB_IMAGE_IMPLEMENTATION,发现如下图。
STB_IMAGE_IMPLEMENTATION起到一个开关的作用,如果不定义它,491-7321行的代码均不会被执行,所以stbi_load定义代码在1221行也不会被执行定义了在这里插入图片描述

你可能感兴趣的:(MNN)