c++ - 将对象 (.o) 文件添加到 qtcreator 项目

标签 c++ c qt qt-creator qmake

如何在 QtCreator 中将第三方 .o 和 .h 文件添加到 Qt C++ 项目中?我想将一些来自 John The Ripper 的已编译 .o 文件添加到我的项目中(忽略它的非跨平台性)。作为测试,A 编写了一个小的 C 程序(在 QtCreator 之外)并将其链接到 common.oMD5_std.o 并且它运行良好;我可以只执行 gcc -o runme common.o MD5_std.o simpleprogram.c,但是对于 QtCreator,似乎没有任何效果。我不断收到 undefined reference 。

我尝试将其添加到 .pro 文件中:

LIBS += "$$_PRO_FILE_PWD_/common.o" "$$_PRO_FILE_PWD_/MD5_std.o" 

还有这个:

LIBS += /full/path/to/common.o /full/path/to/MD5_std.o

我还尝试设置 INCLUDEPATH 并将 .o 文件添加为 .pro 文件中的“其他文件”和“来源”,但无论我做什么,对函数的调用.o 文件总是导致 undefined reference 。

此外,根据我在 Internet 上找到的所有建议(对他们有用,这很奇怪),我没有找到一种方法将 .o 文件以复制到项目的方式添加到项目中影子构建目录,并从那里链接。我引用 $$_PRO_FILE_PWD_ 似乎是错误的。

顺便说一句:我开始工作的是链接一个系统库。当我将 -lcrypt 添加到 LIBS 并包含 unistd.h 时,我可以很好地调用 crypt 函数。

最佳答案

根据您的评论讨论,您似乎至少有两个问题正在进行中:

1) 您需要在 qmake 中使用 OBJECTS 变量来进行 gcc 的 -o 参数的操作。在这里你可以找到它的文档:

OBJECTS

This variable is automatically populated from the SOURCES variable. The extension of each source file is replaced by .o (Unix) or .obj (Win32). You can add objects to the list.

基于此,您将编写如下内容:

OBJECTS += common.o MD5_std.o

请注意,您还需要使用 "extern C"避免 name mangling 的链接规范.当使用来自 C 代码和此类编译的第三方对象时,这是能够链接的必要条件。您需要为相应的 C 函数编写此代码:

extern "C"
{
    ...
}

关于c++ - 将对象 (.o) 文件添加到 qtcreator 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20874587/

相关文章:

c++ - Qwt 绘图自动缩放不工作

c++ - MSVC++ 使用基本运算符 = 重载左值而不是右值?

c++ - std::function到C样式的函数指针

c - 在文字和标识符之外不允许使用非 ASCII 字符

选择新项目后 Qt 创建者崩溃

c++ - qt,类似库的项目,并包含 <>

qt - CMake 中 QMake 的 CONFIG+=console

c++ - 关于涉及唯一指针的安全操作

c++ - 哪些高级语言可以轻松与/C++ 交互?

c - 链接器错误 : undefined reference to `user_input'