【发布时间】:2014-01-19 09:46:42
【问题描述】:
如何在 QtCreator 中将第三方 .o 和 .h 文件添加到 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 函数。
【问题讨论】:
-
您是否尝试过像这样添加它们:
OBJECTS += common.o MD5_std.o? -
@GuilhermeBernal 我没有,但它似乎没有帮助。当我添加一个非现有的目标文件时,它确实给出了一个正确的错误,但指向我的目标文件仍然会在构建时给出未定义的引用。
-
它不是将你构建为 c++ 而不是 c 吗?这可以解释问题。
-
@GuilhermeBernal 这是一个 C++ 项目,没错。但是,我能够调用的 crypt 函数(从 C++ 对象中)也来自 C 库,那么这真的有问题吗?
-
您是否使用正确的
extern "C"声明您的 C 函数?
标签: c++ c qt qt-creator qmake