- В Windows 10 (MSVC 17.6) моя библиотека успешно собирает и связывает, а затем я я могу создать приложение и связать с ним свою библиотеку.
- В Ubuntu 20.04.6 (g++ 10.5.0, ld 2.34) мой библиотека успешно компонуется и связывается, но все приложения не могут с ней связаться, из-за множества ошибок, указывающих на неопределенную ссылку на некоторую библиотеку повышения.
Код: Выделить всё
/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]
Мобильная версия