简体   繁体   English

无法将OpenImageIO与CMake链接

[英]Unable to link OpenImageIO with CMake

I have been trying to link OpenImageIO to an executable using CMake, but keep getting a error during the linking stage of the build. 我一直在尝试使用CMake将OpenImageIO链接到可执行文件,但是在构建的链接阶段一直出现错误。 Does anyone know how to set up the CMakeLists.txt correctly so the library will link? 有谁知道如何正确设置CMakeLists.txt,以便库可以链接?

CMakeLists.txt 的CMakeLists.txt

cmake_minimum_required(VERSION 2.8.4)

project(VolumeFX)

add_compile_options(-std=c++11)

if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
    include_directories("/usr/local/include")
    find_library(OIIO "OpenImageIO" "/usr/local/lib")
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
    include_directories("/group/dpa/include")
    find_library(OIIO "OpenImageIO")
endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

set(SOURCE_FILES
        main.cpp
        Vector.h
        Camera.cpp
        Camera.h
        FloatVolume.h
        SphereVolume.cpp
        SphereVolume.h
        ClampMin.cpp
        ClampMin.h
        Renderer.cpp
        Renderer.h
        Image.cpp
        Image.h
        OIIOFiles.cpp
        OIIOFiles.h)

add_executable(${PROJECT_NAME} ${SOURCE_FILES})

if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
    target_link_libraries(${PROJECT_NAME} ${OIIO})
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
    target_link_libraries(${PROJECT_NAME} ${OIIO})
endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

Here is the output from running the make file... 这是运行make文件的输出...

Scanning dependencies of target VolumeFX
[ 14%] Building CXX object CMakeFiles/VolumeFX.dir/main.cpp.o
[ 28%] Building CXX object CMakeFiles/VolumeFX.dir/Camera.cpp.o
[ 42%] Building CXX object CMakeFiles/VolumeFX.dir/SphereVolume.cpp.o
[ 57%] Building CXX object CMakeFiles/VolumeFX.dir/ClampMin.cpp.o
[ 71%] Building CXX object CMakeFiles/VolumeFX.dir/Renderer.cpp.o
[ 85%] Building CXX object CMakeFiles/VolumeFX.dir/Image.cpp.o
[100%] Building CXX object CMakeFiles/VolumeFX.dir/OIIOFiles.cpp.o
Linking CXX executable VolumeFX
CMakeFiles/VolumeFX.dir/OIIOFiles.cpp.o: In function `lux::writeOIIOImage(char const*, lux::Image&, float, float)':
OIIOFiles.cpp:(.text+0x345): undefined reference to `OpenImageIO::v1_5::ImageOutput::create(std::string const&, std::string const&)'
OIIOFiles.cpp:(.text+0x435): undefined reference to `OpenImageIO::v1_5::ImageSpec::ImageSpec(int, int, int, OpenImageIO::v1_5::TypeDesc)'
CMakeFiles/VolumeFX.dir/OIIOFiles.cpp.o: In function `lux::writeOIIOImage(char const*, lux::Image&, std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<std::string const, std::string> > > const&, float, float)':
OIIOFiles.cpp:(.text+0x18a7): undefined reference to `OpenImageIO::v1_5::ImageOutput::create(std::string const&, std::string const&)'
OIIOFiles.cpp:(.text+0x1997): undefined reference to `OpenImageIO::v1_5::ImageSpec::ImageSpec(int, int, int, OpenImageIO::v1_5::TypeDesc)'
CMakeFiles/VolumeFX.dir/OIIOFiles.cpp.o: In function `lux::readOIIOImage(char const*, lux::Image&)':
OIIOFiles.cpp:(.text+0x2b8b): undefined reference to `OpenImageIO::v1_5::ImageInput::create(std::string const&, std::string const&)'
OIIOFiles.cpp:(.text+0x2c14): undefined reference to `OpenImageIO::v1_5::ImageSpec::ImageSpec(OpenImageIO::v1_5::TypeDesc)'
CMakeFiles/VolumeFX.dir/OIIOFiles.cpp.o: In function `lux::readOIIOImage(char const*, lux::Image&, std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<std::string const, std::string> > >&)':
OIIOFiles.cpp:(.text+0x3011): undefined reference to `OpenImageIO::v1_5::ImageInput::create(std::string const&, std::string const&)'
OIIOFiles.cpp:(.text+0x309a): undefined reference to `OpenImageIO::v1_5::ImageSpec::ImageSpec(OpenImageIO::v1_5::TypeDesc)'
OIIOFiles.cpp:(.text+0x339e): undefined reference to `OpenImageIO::v1_5::ImageSpec::metadata_val(OpenImageIO::v1_5::ParamValue const&, bool) const'
CMakeFiles/VolumeFX.dir/OIIOFiles.cpp.o: In function `OpenImageIO::v1_5::ParamValue::~ParamValue()':
OIIOFiles.cpp:(.text._ZN11OpenImageIO4v1_510ParamValueD2Ev[_ZN11OpenImageIO4v1_510ParamValueD5Ev]+0x14): undefined reference to `OpenImageIO::v1_5::ParamValue::clear_value()'
CMakeFiles/VolumeFX.dir/OIIOFiles.cpp.o: In function `OpenImageIO::v1_5::ImageSpec::attribute(OpenImageIO::v1_5::string_view, OpenImageIO::v1_5::string_view)':
OIIOFiles.cpp:(.text._ZN11OpenImageIO4v1_59ImageSpec9attributeENS0_11string_viewES2_[_ZN11OpenImageIO4v1_59ImageSpec9attributeENS0_11string_viewES2_]+0x1c): undefined reference to `OpenImageIO::v1_5::string_view::c_str() const'
OIIOFiles.cpp:(.text._ZN11OpenImageIO4v1_59ImageSpec9attributeENS0_11string_viewES2_[_ZN11OpenImageIO4v1_59ImageSpec9attributeENS0_11string_viewES2_]+0x66): undefined reference to `OpenImageIO::v1_5::ImageSpec::attribute(OpenImageIO::v1_5::string_view, OpenImageIO::v1_5::TypeDesc, void const*)'
collect2: error: ld returned 1 exit status
make[2]: *** [VolumeFX] Error 1
make[1]: *** [CMakeFiles/VolumeFX.dir/all] Error 2
make: *** [all] Error 2

You used wrong variable name to refer OpenImageIO libraries. 您使用了错误的变量名来引用OpenImageIO库。

if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
    target_link_libraries(${PROJECT_NAME} ${OPENIMAGEIO_LIBRARIES})
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
    target_link_libraries(${PROJECT_NAME} ${OPENIMAGEIO_LIBRARIES})
endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM