Приложению не удается связать библиотеку с 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
- include/
| - mylib/
| - mylib.hpp
- source/
| - myapp/
|     | - CMakeLists.txt
|     | - main.cpp
| - mylib/
| - CMakeLists.txt
| - mylib.cpp
  • используется при запуске cmake -DCMAKE_TOOLCHAIN_FILE=
    /scripts/buildsystems/vcpkg.cmake
  • Корневой файл CMakeLists.txt выглядит так:

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

cmake_minimum_required(VERSION 3.19)

option(BUILD_SHARED_LIBS "Build mylib as shared library" OFF)

project(example LANGUAGES CXX VERSION 0.8.0)
set(CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
if (BUILD_SHARED_LIBS)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
endif()

# Add the included directories:
include_directories(include)

# Add source directories:
add_subdirectory(source/mylib)
add_subdirectory(source/myapp)

# Copy example data so that example program can run:
file(COPY data DESTINATION ${CMAKE_BINARY_DIR})
  • Источник/mylib/CMakeLists.txt выглядит следующим образом:

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

find_package(OpenImageIO CONFIG REQUIRED)

if (BUILD_SHARED_LIBS)
add_library(mylib SHARED mylib.cpp)
else()
add_library(mylib STATIC mylib.cpp)
endif()

target_link_libraries(mylib PRIVATE OpenImageIO::OpenImageIO)
  • Источник/myapp/CMakeLists.txt выглядит следующим образом:

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

add_executable(myapp main.cpp)
target_link_libraries(myapp PRIVATE mylib)
Что я уже пробовал:
  • Различные версии OpenImageIO доступны на vcpkg (Я пробовал как самую последнюю версию 2.5.12, так и 2.5.8)
  • Создание библиотеки как СТАТИЧЕСКОЙ, так и ОБЩЕЙ
    Установка ссылки интерфейс OpenImageIO с моей библиотекой с использованием PUBLIC вместо PRIVATE (изменение source/mylib/CMakeLists.txt на использование: target_link_libraries(mylib PUBLIC OpenImageIO::OpenImageIO))< /li>
    Связывание OpenImageIO напрямую с моим приложением (изменение source/myapp/CMakeLists.txt для использования: target_link_libraries(myapp PRIVATE OpenImageIO::OpenImageIO mylib))
Пока что все, что я пытаюсь сделать, по-прежнему успешно собирает и связывает библиотеку, но не может связать библиотеку с моим исполняемым файлом. (Хотя в Windows/MSVC все работает нормально)

Подробнее здесь: https://stackoverflow.com/questions/787 ... penimageio

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