我需要在我的c ++项目中使用由Jonathan Shewchuk开发的triangulation library。问题是C文件必须编译成目标文件,我使用提供的make文件和visual studio编译器完成。这会生成triangle.exe和triangle.obj。
此外,在Qt我包含头文件triangle.h和对象LIBS + = path / triangle.obj
由于triangle.c中有main函数,我收到以下链接错误:
LNK2005 that _main is already defined in main.obj
LNK2019 unresolved external symbol _triangulate reference
我以前从未使用过对象引用,所以如果有人可以帮我这个。
答案 0 :(得分:2)
首先,让我们简单地解释一下基础知识。
在C / C ++中,编译时,首先生成目标文件(.o)。它们由二进制形式的函数定义组成,但不能执行。
之后,调用链接这些对象文件的链接器以生成可执行文件。
在程序中,您只能有一个主要功能,一个唯一的入口点。
当你写LIBS += path/triangle.obj
时,它是不对的。 Windows上的库是.dll(动态)或.a(静态)文件。
要解决您的问题,我会看到两种不同的解决方案:
1-最简单!
创建一个Qt / C ++程序,可以根据需要调用“三角形可执行文件”。这样你就可以用不同的编译器等单独编译它们......
您可以使用QProcess
类启动外部程序。
2-不太容易:/
通过删除主要功能来修改已启动的源文件,将Qt / make配置为具有相应的编译命令行以使其正常工作。我不想解释更多,因为我热烈建议你选择第一个解决方案;)