如何将第三方.o和.h文件添加到QtCreator中的Qt C ++项目?我想从John The Ripper中添加一些已编译的.o文件到我的probject(忽略它的非跨平台性)。作为测试,a编写了一个小型C程序(在QtCreator之外)并将其与common.o
和MD5_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函数。
答案 0 :(得分:7)
根据您的评论讨论,您似乎至少有两个问题在进行:
1)您需要使用qmake中的OBJECTS变量来使用gcc的-o
参数进行操作。在这里你可以找到它的文档:
此变量自动从SOURCES变量填充。每个源文件的扩展名由.o(Unix)或.obj(Win32)替换。您可以将对象添加到列表中。
基于此,你会写这样的东西:
OBJECTS += common.o MD5_std.o
请注意,您还需要使用"extern C"链接规范来避免name mangling。当使用来自C代码和此类编译的第三方对象时,必须能够链接。您需要为相应的C函数编写此函数:
extern "C"
{
...
}