编译时包含库

时间:2011-12-11 23:32:28

标签: c++ qt user-interface gcc qt-creator

首先,背景信息:Ubuntu 10.10,gcc 4.4.5,C ++,Qt Creator 2.3.1,FLANN。

问题:每次编译我的代码时,都会收到一条错误,提示“未定义对[来自FLANN的函数]的引用”。

解释:我一直在使用Qt Creator中的GUI,它将利用我构建的一些类,包括对FLANN库的引用(不一定非常重要)。一切顺利,直到我合并这些类及其头文件,当然。为了以防万一,我将库添加到.pro文件中,但这并没有解决我的问题。当我使用Makefile测试我的类时,我将Qt制作文件的方式与我制作文件的方式相比缩小了:

我的Makefile:g ++ -g process_stuff.o driver.o -o test.exe /usr/local/lib/libflann_s.a

我将这个库附加到gcc命令的末尾,它完美地运行。此外,如果我删除/usr/local/lib/libflann_s.a我得到了同样的错误,我自己离开了Qt。

问题:通过在我的gcc调用结束时包含库,我到底在做什么,以及如何才能在Qt Creator中实现这一点?感谢所有帮助,并提前感谢。

3 个答案:

答案 0 :(得分:2)

通过在gcc命令末尾添加库,您正在做的事情的简短回答是告诉构建系统它可以在哪里找到库以及要将代码链接到哪个库。 -L部分表示库的路径,-l是您要链接的库的名称。我怀疑这两个都没有被包含在你的Qt项目文件中,这就是为什么当你正常运行时它没有建立的原因。您可以将项目中的两个添加为:

    INCLUDEPATH += $$quote(/usr/local/include)
    LIBS += $$quote(-lflann_cpp_s) \
        $$quote(-L/usr/local/lib/)

答案 1 :(得分:1)

外部库通常以两种形式提供:静态库和共享库。静态库是'.a'文件。当程序链接到静态库时,程序使用的任何外部函数的目标文件中的机器代码将从库中复制到最终的可执行文件中。

答案 2 :(得分:0)

但是片刻之后...... unix:!macx:!symbian:LIBS + = -L $$ PWD /../../../../ usr / local / lib / -lflann_cpp_s修复后to:unix:!macx:!symbian:LIBS + = -L $$ PWD /../../../../ usr / local / lib / -lflann_s

Qt库向导决定将错误的文件包含在库中。更改文件后,一切正常。