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

时间:2014-01-02 00:03:36

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

如何将第三方.o和.h文件添加到QtCreator中的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_似乎是错误的。

BTW:我开始工作的是连接系统库。当我将-lcrypt添加到LIBS并添加unistd.h时,我可以正常调用crypt函数。

1 个答案:

答案 0 :(得分:7)

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

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"
{
    ...
}