在我的项目中编译TetGen时,如何避免LNK2005和LNK1169错误



我正在尝试编译TetGen,并使用下面的代码来四面体化.ply文件,尽管我遇到了以下两个链接器错误:

LNK2005 main已在tetgen.obj中定义

LNK1169找到一个或多个多重定义符号

我的项目解决方案中包含的文件是"tetgen.h">";谓词.cxx">";tetgen.cxx">,并且这三个文件所在的文件夹路径包含在我的项目中属性>C/C++>概述>其他包含目录。我对";monkey.ply";文件。

这是我主文件中的所有代码:

#include "tetgen.h"
int main()
{
tetgenio in, out;
in.firstnumber = 0;
in.load_ply((char *)"monkey.ply");
tetgenbehavior* b = new tetgenbehavior();
tetrahedralize(b, &in, &out);
}

以下是";tetgen.h"谓词.cxx";,以及";tetgen.cxx";我正在使用的文件:https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/libigl/tetgen

我研究了这些错误,环顾四周,但不明白为什么会发生这种情况。如有任何帮助,我们将不胜感激。

LNK2005 main已在tetgen.obj 中定义

此消息试图告诉您tetgen库包含main函数。您的";主文件";还包含CCD_ 2函数。这是一场冲突。您应该从代码中删除main函数,并阅读tetgen库中关于如何提供替换的文档。通常,定义自己的main函数的库需要将main重命名为其他名称,文档应该明确指定这些名称。

#include "tetgen.h"
int main_replacement_called_by_tetgen()
{
...
}

对于将来可能在TetGen中遇到此问题的人:问题是需要在TetGen.h中定义TetGen_LIBRARY标志。我知道这一点,但每次定义标志时,都会导致内存错误。因此,我保持TETGEN_LIBRARY未定义以避免内存错误。事实证明,定义了TETGEN_LIBRARY后,它就可以工作了。问题是";monkey.ply";不存在/在错误的文件夹中。因为";monkey.ply";不存在,它引发了一个未处理的异常。为什么TetGen在加载文件之前没有一个简单的句柄来检查文件是否存在,我无法理解。但这解决了问题。

最新更新