c++ - 在Qt中链接obj文件

标签 c++ c qt lnk2019

我需要使用 triangulation library ,由 Jonathan Shewchuk 在我的 C++ 项目中开发。问题是 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

我以前从未使用过对象引用,所以如果有人可以帮助我解决这个问题。

最佳答案

首先,让我们简单地向您解释一下基础知识。

在 C/C++ 中,编译时,首先生成目标文件 (.o)。它们由二进制形式的函数定义组成,但不能执行。

之后,调用链接器链接这些目标文件以生成可执行文件。

在一个程序中,您只能有一个主要功能,一个唯一的入口点。

当你写LIBS += path/triangle.obj时,这是不对的。 Windows 上的库是 .dll(动态)或 .a(静态)文件。

为了解决您的问题,我看到了两种不同的解决方案:

1- 最简单!

创建一个 Qt/C++ 程序,它会在您需要时调用您的“三角测量可执行文件”。这样你就可以用不同的编译器等单独编译它们...... 您可以使用 QProcess 类启动外部程序。

2- 不太容易 :/

修改您的源文件,从删除主要功能开始,配置 Qt/make 使其具有适当的编译命令行以使其工作。我不想解释更多,因为我强烈建议您选择第一个解决方案;)

关于c++ - 在Qt中链接obj文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24616123/

相关文章:

c++ - 从 OpenSSL-1.0.1r 中删除 OPENSSL_cleanse

c++ - 如何获取元素的个数

c++ - 从 QTextEdit 中删除空格

c++ - QString[] 和 QStringList 有什么区别

C++ OpenGL 着色版本错误 - 不支持 GLSL x [Ubuntu 16.04]

c++ - 如何使错误处理为 boost::spirit 工作

c - 手动转换签名的字符

c++ - 如何支持包含自定义类型的 QVariant 对象的比较?

c++ - Visual Studio 将非托管 64 位 DLL 复制到 SysWOW64 而不是 System32

c++ - 没有滚动条的cpp win7控制台