如何在Visual C++中构建libigl教程的102个例子?
Posted
技术标签:
【中文标题】如何在Visual C++中构建libigl教程的102个例子?【英文标题】:How to build 102 example of libigl tutorial in Visual C++? 【发布时间】:2015-07-08 09:11:51 【问题描述】:我目前在 win7 32 位操作系统上使用 Visual C++ 10.0(2010)。
当我尝试构建libigl github 教程的基本示例时: libigl tutorials
以下安装代码可以正常工作:
#include <igl/cotmatrix.h>
#include <Eigen/Dense>
#include <Eigen/Sparse>
#include <iostream>
int main()
Eigen::MatrixXd V(4,2);
V<<0,0,
1,0,
1,1,
0,1;
Eigen::MatrixXi F(2,3);
F<<0,1,2,
0,2,3;
Eigen::SparseMatrix<double> L;
igl::cotmatrix(V,F,L);
std::cout<<"Hello, mesh: "<<std::endl<<L*V<<std::endl;
return 0;
说明按照教程基本没有问题。
但是,我无法通过以下方式获得tutorial 102:
#include <igl/readOFF.h>
#include <igl/viewer/Viewer.h>
Eigen::MatrixXd V;
Eigen::MatrixXi F;
int main(int argc, char *argv[])
// Load a mesh in OFF format
igl::readOFF("../shared/bunny.off", V, F);
// Plot the mesh
igl::viewer::Viewer viewer;
viewer.data.set_mesh(V, F);
viewer.launch();
在得到一系列缺少一些特殊头文件的构建错误消息后,然后将包含头文件的相应目录添加到VS的包含目录中,仍然有一些头文件丢失,在我的计算机中找不到。
除了本教程所需的包含目录:
x:\Program\libigl-master\include; $(IncludePath);
我已经添加了其他如下:
x:\Program\libigl-master\external\glfw\include;
x:\Program\libigl-master\external\AntTweakBar\src;
x:\Program\libigl-master\external\AntTweakBar\include;
x:\Program\libigl-master\external\glew\include;
错误信息仍然存在:
x:\Program\libigl-master\external\glfw\include\glfw\glfw3.h(163): 致命错误 C1083: 无法打开包含文件: 'GL/glcorearb.h': 没有这样的文件或目录 1>
所以我补充说:
x:\Program\libigl-master\external\glfw\include\GLFW
D:\Program\libigl-master\external\glfw\include\
得到:
x:\program\libigl-master\external\glfw\include\glfw\glfw3.h(163): 致命错误 C1083: 无法打开包含文件: 'GL/glcorearb.h': 没有这样的文件或目录
我的电脑中不存在。
我该怎么办?
【问题讨论】:
How to get the GL library/headers?的可能重复 你能说得更具体点吗?你做了什么,结果如何? 我尝试从微软下载SDKmsdn.microsoft.com/en-us/windows/bb980924.aspx,但在忙了几分钟后安装失败。 让我试试@AlecJacobson 的专业知识。我猜这个库只在有限数量的带有 g++ 编译器的计算机上进行了测试;该库的依赖关系在安装教程中不是很清楚,尤其是对于 windows 用户。我会先尝试它的 Matlab 工具箱替代品 【参考方案1】:我遇到了完全相同的问题,问题是简单地添加它们的包含路径不会使其工作 - 正如他们所说的那样。那是因为 LIBIGL 本身只是一个辅助库来帮助操作 3D 形状,但他们的示例使用的远不止这些(他们的矩阵系统来自 Eigen,他们的图形系统使用 GLFW+GLEW 等等)。
但是您可以获得大多数在 MSVS 上设置基本库的示例。下载以下内容:
-
Eigen:这是用于基本矩阵/向量算术等的。
GLFW:用于为 OpenGL 创建和处理窗口。
GLEW:这个库有实际的 OpenGL 函数绑定来使用 OpenGL 函数。
请注意,这些库对于编译示例非常重要,因为在制作示例时,创建者已经设置了环境(否则他们将不得不手动编写 OpenGL 和 Windows/Linux 窗口处理等代码。在如果您感兴趣,this is what "pure OpenGL" code looks like)。所以你要做的是:为这些库设置环境。这是怎么做的:
在 MSVS 中创建一个空项目后,转到 解决方案资源管理器 > 右键单击项目 > 属性。您已经打开了 Property Pages,所有项目配置都在其中完成。我们需要指定 3 件事:编译器在哪里可以找到头文件、我们正在使用的库以及在哪里可以找到这些库。
首先我们设置标题:在左侧菜单中展开C/C++ > General,在右侧选择Additional Include Directories,点击向下箭头并单击编辑。将打开一个带有空白字段的窗口,单击它们两次 以添加项目。在每一行添加特征头路径、libigl文件夹路径、glew文件夹路径和glfw文件夹路径(这是一个非常混乱的界面)。
好的,现在我们需要指定要使用的库。同样,在左侧菜单中,转到 Linker > Input > Aditional Dependencies(几乎是同一种界面)。添加 glew32s.lib、glfw3.lib 和 opengl32.lib(每行一个)。最后,指定这些库的位置。进入Linker > General > Aditional Library Directories,指定下载的glew32s.lib和glfw3.lib的路径。 (类似于 "C:\Users...\glfw-3.2.1.bin.WIN32\lib-vc2010") - 确保您指定了正确编译器的路径 - 例如,如果您使用的是 MSVS 32 位 2010,您应该选择 vc2010 而不是 mingw-64。
如果您使用教程 2012 源代码在项目中创建一个源文件,它应该可以编译,但如果它不在您的系统路径中,您可能需要specify the paths to the dll's,例如 OpenGL32.dll。
最后,可能出错的最后一件事与称为 运行时库 的东西有关 - 它位于 C/C++ > 代码生成 > 运行时库。基本上它描述了一种编译代码的方法,并且我们使用的每个库都是使用不同的库编译的,所以我们可能会出错......老实说,我对此不太了解,我只知道我的不是使用默认的,所以我改为 /MD 并且它有效。去搞清楚。
PS:您可能还需要更新显卡才能使 OpenGL 正常工作。
【讨论】:
【参考方案2】:唯一对我有用的是使用 cmake-gui 创建一个视觉工作室项目。这是我所做的:
下载并安装 cmake https://cmake.org/download/。 打开 cmake-gui。 在“源代码在哪里”中,输入教程的路径:.../libigl/tutorial。 在“构建二进制文件的位置”中,输入您喜欢的任何内容(我使用了 .../libigl/tutorial/build)。 您还会看到一堆红色的选项。根据需要选择/取消选择。我不得不取消选择 Matlab,因为它由于某种原因找不到它。 配置和生成(当询问时,选择您使用的 Visual Studio 版本)。 您现在应该在 build 文件夹中有一个 Visual Studio 解决方案。打开并构建。【讨论】:
【参考方案3】:我在 Visual Studio 2013 中遇到了同样的问题。我尝试使用的头文件是无法打开的 igl/sort.h。
在tutorial,他们说
只需将 libigl/include 添加到您的包含路径并包含相关标题。
他们在这里引用的包含路径实际上是可以在项目>属性>配置属性>VC++目录下找到的包含目录,而不是附加包含目录。
【讨论】:
以上是关于如何在Visual C++中构建libigl教程的102个例子?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Linux上使用Windows标头构建Visual C ++应用程序?
在 Visual Studio Ultimate 2012 下构建 mex 文件
如何使用 Visual Studio 2019 和 c++ 链接 OpenSSL 库?
在 Windows 上安装 OpenCV 并使用 Visual Studio C++ 构建程序