【发布时间】: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