Приложению не удается связать библиотеку с OpenImageIO.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Приложению не удается связать библиотеку с OpenImageIO.

Сообщение Anonymous »

У меня есть библиотека, которая использует множество зависимостей, управляемых vcpkg. У меня никогда не было никаких проблем, пока я недавно не добавил OpenImageIO.
  • В Windows 10 (MSVC 17.6) моя библиотека успешно собирает и связывает, а затем я я могу создать приложение и связать с ним свою библиотеку.
  • В Ubuntu 20.04.6 (g++ 10.5.0, ld 2.34) мой библиотека успешно компонуется и связывается, но все приложения не могут с ней связаться, из-за множества ошибок, указывающих на неопределенную ссылку на некоторую библиотеку повышения.
Когда я собираю свою библиотеку как статическую библиотеку (в Ubuntu), возникают ошибки следующего вида:

Код: Выделить всё

/usr/bin/ld: ../../vcpkg_installed/x64-linux/debug/lib/libOpenImageIO_d.a(imageinput.cpp.o): in function `boost::thread_specific_ptr::~thread_specific_ptr()':
/mnt/c/Users/cgnam/source/repos/vira/out/ubuntu/vcpkg_installed/x64-linux/include/boost/thread/tss.hpp:61: undefined reference to `boost::detail::set_tss_data(void const*, void (*)(void (*)(void*), void*), void (*)(void*), void*, bool)'
Минимальный рабочий пример:
Можно найти по адресу https://github.com/crgnam/oiio-linker-error(Требуется vcpkg на вашем компьютере):

Чтобы получить более подробную информацию без необходимости использования репозитория, структура файла выглядит следующим образом: это:

Код: Выделить всё

vcpkg.json
CMakeLists.txt
myapp.cpp
mylib.cpp
mylib.hpp

Код: Выделить всё

vcpkg.json:
{
"name": "vira",
"version-string": "0.8.0",
"dependencies": [
"openimageio"
],
"overrides": [
{
"name": "openimageio",
"version": "2.5.8.0#2"
}
],
"builtin-baseline": "352c108a6b6d698c09a8272d8e95fdce550ae408"
}

Код: Выделить всё

CMakeLists.txt:
cmake_minimum_required(VERSION 3.19)

project(example LANGUAGES CXX VERSION 0.8.0)
set(CXX_STANDARD 20)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})

include_directories(.)

# Build and link my library:
add_library(mylib STATIC mylib.cpp)
find_package(OpenImageIO CONFIG REQUIRED)
target_link_libraries(mylib PRIVATE OpenImageIO::OpenImageIO)

# Build and link Executable:
add_executable(myapp myapp.cpp)
target_link_libraries(myapp PRIVATE mylib)

Код: Выделить всё

mylib.hpp:
#ifndef MYLIB_MYLIB_HPP
#define MYLIB_MYLIB_HPP

#include 

namespace mylib {
void getImageDimensions(const std::string& filepath);
};

#endif

Код: Выделить всё

mylib.cpp:
#include "mylib.hpp"

#include 
#include 
#include 

#include "OpenImageIO/imageio.h"
#include "OpenImageIO/imagebuf.h"

namespace mylib {
void getImageDimensions(const std::string& filepath)
{
// Open the file:
auto inp = OIIO::ImageInput::open(filepath);
if (!inp) {
throw std::runtime_error("OpenImageIO could not open: " + filepath);
};

const OIIO::ImageSpec& spec = inp->spec();
int width = spec.width;
int height = spec.height;
int channels = spec.nchannels;

std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/78713522/application-fails-to-link-with-library-linked-against-openimageio[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»