要引入外部库,其主要便是正确编写
pro文件。
一、什么报错是外部库导入错误导致的
- 诸如
xxxxxxx.cpp:1627: error: ‘sdk’ was not declared in this scope ,顾名思义,未声明,往往就是找不到头文件导致。 - 诸如
xxxxxxx.cpp:1624: error: undefined reference to 这一类报错,顾名思义,未定义,往往是找不到库文件导致。
二、解决外部库使用的方法
(一)写入系统环境变量中的外部库调用
在Qt中,“项目”下的“构建设置”下有一个“构建环境”,一般默认使用的是系统环境变量,在“运行设置”下的“Run Environment”一般为使用构建环境,即也是使用的系统环境变量。因此可知,在Qt中调用头文件以及库文件,与系统环境变量是直接相关的。
1、解释说明
- 在Windows中,环境变量就是看“Path”下的配置项,不论是头文件还是库文件所在的文件夹位置,都是写在这下面
- 在Linux中,与Windows不同的是,与头文件相关的默认环境变量就是
/usr/include 和/usr/local/include 这两个目录下。与库文件相关的默认环境变量除了/usr/lib 和/usr/local/lib (lib可能为lib64,一样的效果)这两个目录下,还包含LD_LIBRARY_PATH与LIBRARY_PATH,前者为运行库时使用,后者为构件库使用,但好像前者在构件库也生效。 - 写在系统环境中的头文件就可以直接使用了。
2、使用演示
1.头文件
使用#include <xxxx.h> 调用。
2.库文件
在Qt工程文档中的xx.pro中,使用LIBS 添加库文件,添加所需库文件时使用的名称,为-l加库文件名称(如前面有lib,去掉lib,后面的后缀不要),比如添加libosg.so库文件,写法如下:
LIBS+=-losg //+=的意思是可以直接追加
如果需要添加的库文件较多,可以这么写:
OSGLIBS=-losg -losgDB -losgGA
LIBS+=$$OSGLIBS
(二)未写入系统环境变量中的外部库调用
1、解释说明
- 头文件则需要将头文件所在文件夹,或者所在文件夹之前的上几级文件夹写入pro文件中,使用到的属性为
INCLUDEPATH 。 - 库文件的同样需要将库文件所在的文件夹写入pro文件夹中,使用的属性为
QMAKE_LIBDIR 。
2、使用演示
1.头文件
在pro文件中: windows下:
osg_dir="C:\test\osg" //在双引号中左斜右斜都一样
INCLUDEPATH+=$$osg_dir/include //当然也可以是别的文件夹路径和名称
linux下:
INCLUDEPATH+=/home/test/osg
这样便能调用文件夹下的头文件了,注意,如果此时文件夹下还有子文件夹,可以有两种方法 一种是将后续目录写在调用位置,如下:
另一种是将目录写到INCLUDEPATH后面,一直到这个头文件,如下:
INCLUDEPATH+=/home/test/osg/test
1.库文件
在pro文件中添加如下内容:
osg_dir="C:\test\osg" //在双引号中左斜右斜都一样
QMAKE_LIBDIR+=osg_dir/lib //这个是库文件所在的文件夹路径及名称
OSGLIBS=-losg -losgDB -losgGA
LIBS+=$$OSGLIBS
三、总结
- 环境变量中有的则直接调用。
- 环境变量没有的将路径写在pro文件夹中,然后调用。
- 注意pro文件的语法正确。
|