我正在尝试编译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在加载文件之前没有一个简单的句柄来检查文件是否存在,我无法理解。但这解决了问题。