首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译OSL (开放阴影语言)时出错,缺少OPENIMAGEIO_LIBRARY_DIRS

编译OSL (开放阴影语言)时出错,缺少OPENIMAGEIO_LIBRARY_DIRS
EN

Stack Overflow用户
提问于 2019-01-18 00:13:19
回答 2查看 566关注 0票数 0

我无法按照下面的说明编译OSL:https://github.com/imageworks/OpenShadingLanguage/blob/master/INSTALL.md

错误抱怨缺少一个环境变量OPENIMAGEIO_LIBRARY_DIRS。我尝试自己构建OpenImageIO或者使用vcpkg。因此,我已经设置了所有其他缺失的vars (例如OPENIMAGEIO_LIBRARIES),如果我想设置这个OPENIMAGEIO_LIBRARY_DIRS,它应该指向哪里?还有为什么它说它确实找到了变量,但它也说“找到了合适的版本”2.1.0,最低要求是“1.8.5”?

以下是构建OSL (我在Mac上)时遇到的错误:

代码语言:javascript
复制
-- Building OSL 1.11.0
-- CMake version is 3.13.3
CMake Deprecation Warning at CMakeLists.txt:20 (cmake_policy):
  The OLD behavior for policy CMP0046 will be removed from a future version
  of CMake.

  The cmake-policies(7) manual explains that the OLD behaviors of all
  policies are deprecated and that a policy should be set to OLD only under
  specific short-term circumstances.  Projects should be ported to the NEW
  behavior and not rely on setting a policy to OLD.


-- Project build dir   = /Users/simionnacu/Desktop/TestingGrounds/osl/build/macosx
-- Project install dir = /Users/simionnacu/Desktop/TestingGrounds/osl/dist/macosx
-- platform = macosx
-- CMAKE_CXX_COMPILER is /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-- CMAKE_CXX_COMPILER_ID is AppleClang
-- Building for C++11
-- Setting Namespace to: OSL_v1_11
CMake Error at /usr/local/Cellar/cmake/3.13.3/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find OpenImageIO (missing: OPENIMAGEIO_LIBRARY_DIRS) (found
  suitable version "2.1.0", minimum required is "1.8.5")
Call Stack (most recent call first):
  /usr/local/Cellar/cmake/3.13.3/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
  src/cmake/modules/FindOpenImageIO.cmake:79 (find_package_handle_standard_args)
  src/cmake/externalpackages.cmake:58 (find_package)
  CMakeLists.txt:133 (include)

编辑:基于@Tsyvarev答案添加了env变量和文件夹树的图像

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-19 09:20:45

因此,脚本src/cmake/modules/FindOpenImageIO.cmake不寻常的方式运行:

如果第一次运行 cmake时找不到一个库,那么每当环境设置是否正确时,就会使cmake所有进一步的调用失败。

在第一个失败之后使其成功的唯一方法是删除CMake缓存文件(构建目录中的CMakeCache.txt)。

通常FindXXX.cmake是这样编写的,如果库第一次运行时还没有找到,则可以调整环境设置,并且重新运行 cmake以尝试E 123搜索e 224e 125再次E 226。CMake命令find_libraryfind_path和类似的命令完全支持这样的行为。

FindOpenImageIO.cmake使用的脚本

代码语言:javascript
复制
find_library(OPENIMAGEIO_LIBRARY ...)

查找OpenImageIO库,然后将库文件的目录部分解压缩到另一个变量OPENIMAGEIO_LIBRARY_DIRS中。

代码语言:javascript
复制
get_filename_component (OPENIMAGEIO_LIBRARY_DIRS "${OPENIMAGEIO_LIBRARY}" DIRECTORY CACHE)

但是它缓存这种提取的结果(因为CACHE选项),所以如果第一次没有找到库,变量OPENIMAGEIO_LIBRARY_DIRS变成空,将不再重写(因为它是缓存的)。变量的空值由“未找到库”的脚本来处理。

票数 1
EN

Stack Overflow用户

发布于 2019-01-18 08:58:52

错误信息

代码语言:javascript
复制
Could NOT find OpenImageIO (missing: OPENIMAGEIO_LIBRARY_DIRS) (found
  suitable version "2.1.0", minimum required is "1.8.5")

这意味着CMake找到了OpenImageIO标头,从它们检测到了版本(2.1.0),但是无法找到库。

如果错误消息告诉nothing有关环境变量设置,则OPENIMAGEIO_LIBRARY_DIRS是脚本使用的CMake变量

但是,如果打开src/cmake/modules/FindOpenImageIO.cmake脚本(这是CMake调用跟踪中列出的),您可能会找到一种方法来提示安装OpenImageIO:

代码语言:javascript
复制
# Special inputs:
#   OPENIMAGEIO_ROOT_DIR - custom "prefix" location of OIIO installation
#                          (expecting bin, lib, include subdirectories)

也就是说,您可以将OPENIMAGEIO_ROOT_DIR 环境变量设置为OpenImageIO库的安装路径。正如注释中所指出的,这个安装路径希望包含bin/lib/include/子目录。在lib/子目录中,它应该是OpenImageIO库文件(具有适当的前缀和后缀)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54246093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档