You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构建运行OpenSubdiv教程示例 解决编译链接报错问题

错误原因

这是标准的链接阶段缺失依赖库报错:编译时g++已经成功找到OpenSubdiv的头文件完成了语法检查,但链接时没有指定要链接的OpenSubdiv实现库,ld找不到TopologyDescriptor构造函数对应的二进制实现,最终抛出undefined reference错误。

快速修复:直接用g++命令编译

你执行make install之后,OpenSubdiv默认将头文件安装到/usr/local/include,动态库安装到/usr/local/lib,编译时手动指定头文件路径、库路径和需要链接的库即可:

  1. 先执行ls /usr/local/lib/libosdCPU*确认库文件存在,正常会输出类似libosdCPU.so.3.4.4的结果
  2. 把原编译命令替换为以下内容:
g++ opensubd_minimal_example.cpp -o opensubd_minimal_example -I/usr/local/include -L/usr/local/lib -losdCPU -lglfw -lGL -lX11 -lpthread -ldl
  1. 如果运行编译出的程序时提示找不到libosdCPU.so,先执行一次sudo ldconfig刷新系统动态库缓存即可。

注意:你贴的测试代码里g_nverts/g_nfaces/g_vertsperface/g_vertIndices四个变量未定义,测试时需要先补全,最小测试用例可以在main函数前加以下代码:

const int g_nverts = 4;
const int g_nfaces = 1;
const int g_vertsperface[1] = {4};
const int g_vertIndices[4] = {0,1,2,3};
推荐方案:使用CMake管理编译配置

长期开发不建议手动写g++编译参数,用CMake可以自动查找依赖、处理链接关系,不用手动记路径和库名:

  1. 在代码文件同级目录新建名为CMakeLists.txt的配置文件,写入以下内容:
cmake_minimum_required(VERSION 3.10)
project(opensubd_test)

find_package(OpenSubdiv REQUIRED)
find_package(glfw3 REQUIRED)

add_executable(opensubd_minimal_example opensubd_minimal_example.cpp)
target_link_libraries(opensubd_minimal_example PRIVATE
    OpenSubdiv::osdCPU
    glfw
)
  1. 依次执行以下命令完成编译:
mkdir build
cd build
cmake ..
make -j$(nproc)

编译完成后直接运行./opensubd_minimal_example即可。

补充说明

你之前安装的doxygen是文档生成工具,因为编译OpenSubdiv时已经指定了NO_DOC=1,这个依赖完全可以不装,不影响库的功能。你编译时关闭了TBB、CUDA、OpenCL、PTEX等所有可选依赖,所以只需要链接OpenSubdiv的核心CPU库osdCPU即可,不需要额外链接其他OpenSubdiv相关组件。

内容的提问来源于stack exchange,提问作者GeneralPancake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 09:03:21