【问题标题】:Adding object (.o) files to qtcreator project将对象 (.o) 文件添加到 qtcreator 项目
【发布时间】:2014-01-19 09:46:42
【问题描述】:

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

我尝试将其添加到 .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 文件中函数的调用总是会导致在未定义的引用中。

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

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

【问题讨论】:

  • 您是否尝试过像这样添加它们:OBJECTS += common.o MD5_std.o?
  • @GuilhermeBernal 我没有,但它似乎没有帮助。当我添加一个非现有的目标文件时,它确实给出了一个正确的错误,但指向我的目标文件仍然会在构建时给出未定义的引用。
  • 它不是将你构建为 c++ 而不是 c 吗?这可以解释问题。
  • @GuilhermeBernal 这是一个 C++ 项目,没错。但是,我能够调用的 crypt 函数(从 C++ 对象中)也来自 C 库,那么这真的有问题吗?
  • 您是否使用正确的 extern "C" 声明您的 C 函数?

标签: c++ c qt qt-creator qmake


【解决方案1】:

根据您的评论讨论,您似乎至少存在两个问题:

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

OBJECTS

此变量自动从 SOURCES 变量中填充。每个源文件的扩展名都替换为 .o (Unix) 或 .obj (Win32)。您可以将对象添加到列表中。

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

OBJECTS += common.o MD5_std.o

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

extern "C"
{
    ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 2021-03-19
    • 1970-01-01
    相关资源
    最近更新 更多