依赖OpenImageIO的库与应用在Ubuntu下链接失败问题
OpenImageIO + vcpkg 跨平台链接异常问题
问题背景
我有一个依赖vcpkg管理多第三方库的项目,引入OpenImageIO后出现平台差异问题:
- Windows 10(MSVC 17.6):库本身编译链接正常,依赖该库的应用也能成功完成链接
- Ubuntu 20.04.6(g++ 10.5.0,ld 2.34):库编译链接无报错,但所有依赖该库的应用在链接阶段都会抛出大量Boost库未定义引用错误,静态构建时的典型错误如下:
/usr/bin/ld: ../../vcpkg_installed/x64-linux/debug/lib/libOpenImageIO_d.a(imageinput.cpp.o): in function `boost::thread_specific_ptr<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::~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)'
已准备最小复现案例
已提供可复现问题的最小项目,需通过vcpkg构建,项目结构及CMake配置均包含其中。
已尝试的无效解决方案
- 更换vcpkg仓库中不同版本的OpenImageIO(2.5.12、2.5.8)
- 切换库的静态/动态构建方式
- 将OpenImageIO的CMake链接属性从
PRIVATE改为PUBLIC - 在应用侧直接显式链接OpenImageIO
以上操作均未能解决Ubuntu下的链接失败问题,但Windows环境始终正常工作。
补充验证结果
通过sudo apt install libopenimageio-dev安装系统提供的OpenImageIO开发库,修改CMake配置后,Ubuntu下的应用可以正常链接并运行。
疑问
出现此问题是vcpkg的OpenImageIO端口存在缺陷,还是我在CMake依赖管理或vcpkg使用逻辑上存在理解误区?
内容的提问来源于stack exchange,提问作者Chris Gnam
相关产品推荐
相关产品推荐

