Реализация STB-изображений с tinygltf и sfml - PullRequest
0 голосов
/ 29 марта 2020

Я включаю в свой проект tinygltf и sfml. Когда я включаю tinygltf с этими параметрами:

#define TINYGLTF_IMPLEMENTATION
#define STB_IMAGE_IMPLEMENTATION
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include <tiny_gltf.h>

, я получаю несколько ошибок определения:

/usr/bin/ld.gold: error: sfml/lib/libsfml-graphics-s.a(ImageLoader.cpp.o): multiple definition of 'stbi_write_jpg'
/usr/bin/ld.gold: _objs/client_lib/loader.pic.o: previous definition here

Это всего лишь небольшой фрагмент ошибок, но для большинства функций stb есть похожая ошибка. Поэтому я попытался исправить это, добавив tinygltf следующим образом:

#define TINYGLTF_IMPLEMENTATION
#include <tiny_gltf.h>

Однако теперь есть только одна исключительная ошибка:

_objs/client_lib/loader.pic.o:loader.cpp:function tinygltf::LoadImageData(tinygltf::Image*, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, int, int, unsigned char const*, int, void*): error: undefined reference to 'stbi_is_16_bit_from_memory'

Кажется, что две библиотеки слегка зависят разные версии стб. Есть ли способ исправить это?

Я использую tinygltf версии 2.2.0 и sfml версии 2.5.1.

1 Ответ

1 голос
/ 30 марта 2020

Поскольку вы статически связываете SFML, вы интегрируете в свое приложение все символы SFML, включая символы STB.

Здесь я вижу два разных решения, возможно, есть и другие:

  • Обновите заголовок STB в каталоге extlibs / SFML и перестройте SFML
  • Динамически связывайте SFML, чтобы ваше приложение не видело символы SFML STB
...