【问题标题】:Cmake failing to link with OpenImageIO in Clion 2021.2Cmake 无法与 Clion 2021.2 中的 OpenImageIO 链接
【发布时间】:2021-10-30 04:43:13
【问题描述】:

我在将 OpenImageIO 库与 cmake 链接时遇到问题。每次我尝试编译时都会遇到链接器错误。这是我试图用 Clion 编译的示例代码

#include <memory>
#include <OpenImageIO/imageio.h>

OIIO_NAMESPACE_USING
using namespace std;

int main(int argc, char* argv[]) {

    std::string myFile = "Hello.jpg";
    auto out = ImageOutput::create (myFile);
    return 0;
}

这是我的 cmake 文件

cmake_minimum_required(VERSION 3.19.2)
project(Open_Test)

set(CMAKE_CXX_STANDARD 17)

find_package(Boost COMPONENTS system filesystem REQUIRED)
find_package(Openimageio REQUIRED )

add_executable(Open_Test main.cpp)

if(Boost_FOUND)
    message(STATUS "Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}")
    message(STATUS "Boost_LIBRARIES: ${Boost_LIBRARIES}")
    message(STATUS "Boost_VERSION: ${Boost_VERSION}")
    message(${Boost_SYSTEM_LIBRARY})
    include_directories(${Boost_INCLUDE_DIRS})
endif()

if(Openimageio_FOUND)
    message(STATUS "OpenImageIO_INCLUDE_DIR: ${OpenImageIO_INCLUDE_DIR}")
    message(STATUS "Openimageio_LIBRARIES: ${OpenImageIO_LIB_DIR}")
    message(STATUS "Openimageio_VERSION: ${Openimageio_VERSION}")
    include_directories(${OpenImageIO_INCLUDE_DIR})
endif()


target_link_libraries(Open_Test
        ${Boost_FILESYSTEM_LIBRARY}
        ${Boost_SYSTEM_LIBRARY}
        ${WHAT TO SET IT TOO}
        )

我很确定问题出在 target_link_libraries 上。我不确定要为 OpenImageIO 放什么。我试过直接链接到库(/usr/local/Cellar/openimageio/2.2.17.0/lib)和(/usr/local/Cellar/openimageio/2.2.17.0/lib/libOpenImageIO_Util.2.2.17. dylib)

我只是对 cmake 不太熟悉。任何帮助表示赞赏

这是链接器错误

Undefined symbols for architecture x86_64:
  "OpenImageIO_v2_2::ImageOutput::create(OpenImageIO_v2_2::string_view, OpenImageIO_v2_2::Filesystem::IOProxy*, OpenImageIO_v2_2::string_view)", referenced from:
      _main in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [Open_Test] Error 1
make[2]: *** [CMakeFiles/Open_Test.dir/all] Error 2
make[1]: *** [CMakeFiles/Open_Test.dir/rule] Error 2
make: *** [Open_Test] Error 2

【问题讨论】:

  • message(STATUS "Openimageio_LIBRARIES: ${OpenImageIO_LIB_DIR}") 看起来很奇怪。
  • 我用它作为调试语句来查看它在哪里定位 OpenImageIO。它打印出 (/usr/local/Cellar/openimageio/2.2.17.0/lib)
  • 你有 64 位版本的库吗?我认为它会进入 /usr/.../lib64?您的 LD_LIBRARY_PATH 是否设置了该路径?回声 $LD_LIBRARY_PATH
  • Openimageio_LIBRARIES 不是 OpenImageIO_LIB_DIR。那么,您知道这些变量并且无法在 target_link_libraries 中使用它们吗?
  • 我只是偶然发现的。我有一个错字。 libOpenImageIO.2.2.17.dylib 不是 libOpenImageIO_Util.2.2.17.dylib

标签: c++ cmake clion


【解决方案1】:

原来这是由于 target_link_library 中的拼写错误。目录

/usr/local/Cellar/openimageio/2.2.17.0/lib/libOpenImageIO_Util.2.2.17.dylib)

需要

(/usr/local/Cellar/openimageio/2.2.17.0/lib/libOpenImageIO.2.2.17.dylib)

然后它就像一个冠军

target_link_libraries(Open_Test /usr/local/Cellar/openimageio/2.2.17.0/lib/libOpenImageIO.2.2.17.dylib)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-25
    • 2017-04-22
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多