与 stb 图像一起使用 assimp 库时出现的问题

问题描述

当我尝试将 Assimpstb 一起使用时,它表示已经定义了一些函数并且它不会链接

CMakeLists.txt

cmake_minimum_required(VERSION 3.20)
project(TestProject)

add_executable(TestProject "main.cpp")

set(BUILD_SHARED_LIBS OFF)
add_subdirectory("vendor/assimp")

target_include_directories(TestProject PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/vendor/stb")
target_include_directories(TestProject PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/vendor/assimp/include")
target_include_directories(TestProject PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/vendor/assimp/include")

target_link_libraries(TestProject PUBLIC assimp)

main.cpp

#include <iostream>
#include "assimp/Importer.hpp"
#include "assimp/scene.h"
#include "assimp/postprocess.h"
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"

int main(){
    std::cout << "Hello World" << std::endl;

    int width,height,nrChannels;
    uint8_t* data = stbi_load("image.jpg",&width,&height,&nrChannels,0);

    Assimp::Importer importer;

    stbi_image_free(data);
    std::cin.get();
}

这是我从中得到的输出。 stb 文件中的一些函数似乎无法正确链接

4>assimp-vc142-mtd.lib(PbrtExporter.obj) : error LNK2005: stbi_load_from_memory already defined in main.obj
4>assimp-vc142-mtd.lib(PbrtExporter.obj) : error LNK2005: stbi_load_from_callbacks already defined in main.obj
4>assimp-vc142-mtd.lib(PbrtExporter.obj) : error LNK2005: stbi_load already defined in main.obj
4>assimp-vc142-mtd.lib(PbrtExporter.obj) : error LNK2005: stbi_load_from_file already defined in main.obj
4>assimp-vc142-mtd.lib(PbrtExporter.obj) : error LNK2005: stbi_load_gif_from_memory already defined in main.obj
4>assimp-vc142-mtd.lib(PbrtExporter.obj) : error LNK2005: stbi_load_16_from_memory already defined in main.obj
4>assimp-vc142-mtd.lib(PbrtExporter.obj) : error LNK2005: stbi_load_16_from_callbacks already defined in main.obj
4>assimp-vc142-mtd.lib(PbrtExporter.obj) : error LNK2005: stbi_load_16 already defined in main.obj
4>assimp-vc142-mtd.lib(PbrtExporter.obj) : error LNK2005: stbi_load_from_file_16 already defined in main.obj
4>assimp-vc142-mtd.lib(PbrtExporter.obj) : error LNK2005: stbi_loadf_from_memory already defined in main.obj
4>assimp-vc142-mtd.lib(PbrtExporter.obj) : error LNK2005: stbi_loadf_from_callbacks already defined in main.obj
4>assimp-vc142-mtd.lib(PbrtExporter.obj) : error LNK2005: stbi_loadf already defined in main.obj
...

我是从源文件构建的。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)