提问人:GeneralPancake 提问时间:6/19/2022 更新时间:6/19/2022 访问量:167
如何构建和运行 OpenSubdiv 教程/示例
How to build and run OpenSubdiv Tutorials/examples
问:
我正在尝试使用 OpenSubdiv C++ 库进行实验。我不是一个有经验的C++程序员。
OpenSubdiv 库有一些我想开始使用的教程,但我无法弄清楚如何。
到目前为止,我已经通过执行以下操作(我在 Ubuntu 上,供参考)尽我极其有限的能力安装了 OpenSubD 和依赖项 (GLFW)。
sudo apt-get install doxygen # (GLFW Dependency?)
sudo apt-get install xorg-dev # (GLFW Dependency?)
sudo apt-get install libglfw3 # (GLFW Dependency?)
sudo apt-get install libglfw3-dev # (GLFW Dependency?)
git clone [email protected]:PixarAnimationStudios/OpenSubdiv.git
cd OpenSubdiv
mkdir build
cd build
cmake -D NO_PTEX=1 -D NO_DOC=1 -D NO_OMP=1 -D NO_TBB=1 -D NO_CUDA=1 -D NO_OPENCL=1 -D NO_CLEW=1 -D GLFW_LOCATION="/usr/" ..
cmake --build . --config Release --target install
请注意,这大致遵循 OpenSubdiv 存储库 README 中给出的说明。
我尝试编译的代码是
#include <GLFW/glfw3.h>
#include <opensubdiv/far/topologyDescriptor.h>
#include <opensubdiv/far/primvarRefiner.h>
#include <cstdio>
using namespace OpenSubdiv;
int main(int, char **){
typedef Far::TopologyDescriptor Descriptor;
Sdc::SchemeType type = OpenSubdiv::Sdc::SCHEME_CATMARK;
Sdc::Options options;
options.SetVtxBoundaryInterpolation(Sdc::Options::VTX_BOUNDARY_EDGE_ONLY);
// Compiles fine up to this point.
Descriptor desc; //Fails here, trying to instantiate a "Descriptor" object, which lives in OpenSubdiv
desc.numVertices = g_nverts;
desc.numFaces = g_nfaces;
desc.numVertsPerFace = g_vertsperface;
desc.vertIndicesPerFace = g_vertIndices;
return 0;
}
我得到的错误是
g++ opensubd_minimal_example.cpp -o opensubd_minimal_example
/usr/bin/ld: /tmp/cc4WQ9jc.o: in function `main':
opensubd_minimal_example.cpp:(.text+0x57): undefined reference to `OpenSubdiv::v3_4_4::Far::TopologyDescriptor::TopologyDescriptor()'
collect2: error: ld returned 1 exit status
我猜我缺少一些链接需要发生,但我不知道是什么,而且我无法通过查看 OpenSubd 使用的文件来弄清楚,因为我不知道如何使用 .cmake
cmake
我可以使用一些指导。谢谢。
答:
1赞
TonnyRed
6/19/2022
#1
请参考 OpenSubDiv 的最后一部分:使用 cmake 构建。
链接器需要知道在哪里可以找到要链接的库。将变量设置为 OpenSubDiv 目录,然后编译并链接您的应用。OPENSUBDIV
g++ -I$OPENSUBDIV/include -c myapp.cpp
g++ myapp.o -L$OPENSUBDIV/lib -losdGPU -losdCPU -o myapp
评论
0赞
GeneralPancake
6/19/2022
这奏效了,其中 ,这是我从 Github 中提取的 OpenSubDiv 存储库。让我感到困惑的是没有文件夹?那么它实际上是如何找到包含文件的呢?有没有办法扩展我实际传递到编译器中的路径?$OPENSUBDIV = OpenSubDiv
OpenSubDiv/include
0赞
TonnyRed
6/19/2022
最初问题的答案是链接器找不到库。您通过 指向库。查找标头是另一回事。您可以尝试转储尖括号 #include 的所有包含路径,其中 -v 是详细的,x c++ - cpp,-E /dev/null - 预处理 /dev/null 然后停止。-losdGPU -losdCPU
gcc -v -x c++ -E /dev/null
评论