目录
.pro文件中各变量意义:
Qt 中添加 动态库(.so) 和 静态库 (.a) 的方法
注1: .pro文件中LIBS用法详细讲解
注2:Qt中Makefile文件里INCPATH和LIBS参数详解
------------------------------------------------------------
参考:
Qt 制作和使用自己制作的 静态库
https://blog.csdn.net/ken2232/article/details/130447146
Qt 中添加 动态库(.so) 和 静态库 (.a) 的方法 (*)
https://blog.csdn.net/ken2232/article/details/130447069
Qt 动态库/静态库的创建和使用教程(step by step) :带笔记(**)
https://blog.csdn.net/ken2232/article/details/130446757
=========================================
Qt 中添加 动态库(.so) 和 静态库 (.a) 的方法
在QT 的Makefile文件中:
1 添加动态库,如lipcap.so
则,在LIBS一行中添加“-L/usr/local/lib -lpcap”,依据自己的情况修改libpcap.so的路径
LIBS += -L/usr/local/lib -lpcap
2 添加静态库,如libtinyxml.a
则,在LIBS一行添加“/home/yzj/tinyxml/libtinyxml.a”;
?完整的代码行为 ??????
在INCPATH一行添加“ -I /home/yzj/tinyxml -I.”,依据自己的情况修改libtinyxml.a的路径
但是有一个问题,是重新编译后这个Makefile会改变,不知有没有其他添加动态库和静态库的方法,希望不吝赐教。
————————————————
版权声明:本文为CSDN博主「yzj19870824」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yzj19870824/article/details/6933737
注1: .pro文件中LIBS用法详细讲解
用法:LIBS += -Lzzz -lxxx -lyyy
zzz:库路径
xxx、yyy:库文件
库路径可以有以下的形式:
-L. 表示 .pro所在目录
-L$$_PRO_FILE_PWD_/ 表示 .pro所在目录
-L$$PWD/ 表示 .pro所在目录
-LC:/abc/ 表示C:/abc/
库文件可以有以下的形式:
若.pro所在目录lib下有解码库需要被链接,msvc版本为“VideoDecoder.lib”,mingw版本为“libVideoDecoder.a”。
(1)不加-l时,需要写库文件全名:
LIBS += -L$$PWD/lib VideoDecoder.lib
或
LIBS += -L$$PWD/lib libVideoDecoder.a
这样写死,不利于多编译器编译,不推荐。
(2)加 -l 时,可以将不同编译器库文件名差异屏蔽掉
假设链接msvc库,则只需要去掉文件后缀(一般是.lib):
LIBS += -L$$PWD/lib -lVideoDecoder
假设链接mingw/gcc库,则需要去掉文件前缀"lib",和后缀(一般是.a):
LIBS += -L$$PWD/lib -lVideoDecoder
这样不管在哪个编译器下,都能保证命令一致。
注意:
请牢记msvc库 只去 后缀,mingw库 去 前缀和后缀。
因为我遇到一个问题,使用msvc编译工程,工程中调用了boost线程库,boost使用msvc编译为静态库,这个静态线程库
的名字比较坑“libboost_thread-vc141-mt-gd-x64-1_71.lib”,按照我们一贯的想法,肯定是去掉前lib,去掉后缀.lib,像这样:
LIBS += -LC:/Boost_msvc_static/lib/ -lboost_thread-vc141-mt-gd-x64-1_71
死活编译不过,找不到库文件。此时,你只要想起来链接msvc库只去后缀,像这样:
LIBS += -LC:/Boost_msvc_static/lib/ -llibboost_thread-vc141-mt-gd-x64-1_71
编译就通过了。
附《msvc、mingw分别编译动态库与静态库文件名区别》:
msvc动态库:test.dll,test.lib
msvc静态库:test.lib
mingw动态库:test.dll、libtest.a
mingw静态库:libtest.a
————————————————
版权声明:本文为CSDN博主「百里杨」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zyhse/article/details/105408639
注2:Qt中Makefile文件里INCPATH和LIBS参数详解
1 LIBS中的-l 和 -L参数
-l 参数是用来指定程序要连接的库,
-l参数紧接着就是库名, 库名和真正的库文件名的差别, 以数学库为例,
其库名为 m , 其 库文件名为 libm.so,也就是把库名头文件的lib 和 .so 去掉就是库名。
放在/lib, /usr/lib 和 /usr/local/lib 中的库直接使用参数 -l 链接就可以了, 如果没有放在这三个文件(夹?)中, 那么,我们就要使用-L 加上库文件所在的文件夹, 然后再使用 -l 加上库名就好了。
另外,大部分libxxxx.so只是一个链接,以RH9为例,比如 libm.so它链接到
/lib/libm.so.x,/lib/libm.so.6又链接到/lib/libm-2.3.2.so,如果没有这样的链接,还是会出错,因为ld只会找libxxxx.so,所以如果你要用到xxxx库,而只有libxxxx.so.x或者libxxxx- x.x.x.so,做一个链接就可以了ln -s libxxxx-x.x.x.so libxxxx.so
手工来写链接参数总是很麻烦的,还好很多库开发包提供了生成链接参数的程序,名字一般叫xxxx-config,一般放在/usr/bin目录下,比如gtk1.2的链接参数生成程序是gtk-config,执行
gtk-config --libs
就能得到以下输出
"-L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm"
这就是编译一个gtk1.2程序所需的gtk链接参数,xxx-config除了 --libs参数外还有一个参数是--cflags用来生成头文件包含目录的,也就是-I参数,在下面我们将会讲到。你可以试试执行gtk-config --libs --cflags,看看输出结果。现在的问题就是怎样用这些输出结果了,最笨的方法就是复制粘贴或者照抄,聪明的办法是在编译命令行里加入这个`xxxx -config --libs --cflags`,比如编译一个gtk程序:gcc gtktest.c `gtk-config --libs --cflags`这样就差不多了。注意`不是单引号,而是1键左边那个键。
除了xxx-config以外,现在新的开发包一般都用pkg-config来生 成链接参数,使用方法跟xxx-config类似,但xxx-config是针对特定的开发包,但pkg-config包含很多开发包的链接参数的生成, 用pkg-config --list-all命令可以列出所支持的所有开发包,pkg-config的用法就是pkg-config pagName --libs --cflags,其中pagName是包名,是pkg-config--list-all里列出名单中的一个,比如gtk1.2的名字就是gtk+, pkg-config gtk+ --libs --cflags的作用跟gtk-config --libs --cflags是一样的。比如:gcc gtktest.c `pkg-config gtk+ --libs --cflags`。
这段是抄的别人的, 先写在这里吧。
2 INCPATH中的-I 参数
-I参数是用来指定头文件目录,/usr/include目录一般是不用指定的,gcc知道去那里找,
但是如果头文件不在/usr/include里我们就要用-I参数指定了,比如头文件放在/myinclude目录里,那编译命令行就要加上- I/myinclude参数了,如果不加你会得到一个"xxxx.h: No such file or directory"的错误。
-I参数可以用相对路径,比如头文件在当前目录,可以用-I.来指定。上面我们提到的--cflags参数就是用来生成-I 参数的。
INCPATH = -I. -I. -ID:\Qt\Qt5.8.0\5.8\mingw53_32\include -ID:\Qt\Qt5.8.0\5.8\mingw53_32\include\QtWidgets -ID:\Qt\Qt5.8.0\5.8\mingw53_32\include\QtGui -ID:\Qt\Qt5.8.0\5.8\mingw53_32\include\QtANGLE -ID:\Qt\Qt5.8.0\5.8\mingw53_32\include\QtCore -Idebug -I. -ID:\Qt\Qt5.8.0\5.8\mingw53_32\mkspecs\win32-g++
————————————————
版权声明:本文为CSDN博主「代码痴汉」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lieyanhaipo/article/details/17056011
.pro文件中各变量意义:
QT中 No such file or directory的解决办法_qt no such file_404技术社区
大家可以想下Makefile文件是如何生成的,是qmake根据.pro文件编译后产生的,那么解决方法为:
在创建工程的时候使用如下语句:
qmake -project QT+=widgets
qmake CH01.pro
查看Makefile.Release(Debug)文件中的INCPATH = -I. -I. -ID:\Qt\Qt5.8.0\5.8\mingw53_32\include -ID:\Qt\Qt5.8.0\5.8\mingw53_32\include\QtWidgets -ID:\Qt\Qt5.8.0\5.8\mingw53_32\include\QtGui -ID:\Qt\Qt5.8.0\5.8\mingw53_32\include\QtANGLE -ID:\Qt\Qt5.8.0\5.8\mingw53_32\include\QtCore -Idebug -I. -ID:\Qt\Qt5.8.0\5.8\mingw53_32\mkspecs\win32-g++
.pro文件中各变量意义:
◆ HEADERS 指定工程的 C++头文件(.h)。
◆ SOURCES 指定工程的C++实现文件(.cpp)。
◆ FORMS 指定需要 uic 处理的由 Qt 设计师生成的.ui 文件。
◆ RESOURCES 指定需要 rcc 处理的.qrc 文件。
◆ DEFINES 指定预定义的 C++预处理符号。
◆ INCLUDEPATH 指定 C++编译器搜索全局头文件的路径。
◆ LIBS 指定工程要链接的库。库既可以通过绝对路径指定,也可以使用源自 Unix 的-L 和-l 标识符来指定(例如,-L/usr/local/lib 和-ldb_cxx)。
◆ CONFIG 指定各种用于工程配置和编译的参数。
◆ QT 指定所要使用的 Qt 模块(默认是 core gui,对应于 QtCore 和 QtGui 模块)。加上模块之后,makefile中的模块头文件目录也就自动加上啦。
◆ VERSION 指定目标库的版本号。
◆ TARGET 指定可执行文件或库的基本文件名,其中不包含任何的扩展、前缀或版本
号(默认的是当前的目录名)。
◆ DESTDIR 指定可执行文件放置的目录(默认值是平台相关的。
例如,在 Linux 上,指当前目录;在 Windows 上,则是指 debug 或 release 子目
录)。
◆ DLLDESTDIR 指定目标库文件放置的目录(默认路径与 DESTDIR 相同)。
CONFIG 变量用来控制编译过程中的各个方面。它支持下面这些参数:
◆ debug 是指具有调试信息的可执行文件或者库,链接 Qt 库的调试版。
◆ release 是指编译不具有调试信息的可执行文件或者库,链接发行版的 Qt 库。如果
同时指定 debug 和 release,则 debug 有效。
◆ warn_off 会关闭大量的警告。默认情况下,警告的状态是打开的。
◆ qt 是指应用程序或者库使用 Qt。这一选项是默认包括的。
◆ dll 是指动态编译库。
◆ staticlib 是指静态编译库。
◆ plugin 是指编译一个插件。插件总是动态库,因此这一参数暗含 dll 参数。
◆ console 是指应用程序需要写控制台(使用 cout、cerr、qWarning(),等等)。
◆ app_bundle 只适用于 Mac OS X 编译,是指可执行文件被放到束中,这是 Mac OS X
的默认情况。
◆ lib_bundle 只适用于 Mac OS X 编译,指库被放到框架中。
关于上面的各个变量的使用方法:
在终端上执行
qmake -project QT+= widgets
则加上了widgets模块,在pro文件中生成 QT+=widgets 语句。
qmake -project SOURCES+= ./src/test/cpp
则在pro文件生成 SOURCES+=./src/test.cpp
注3: libpcap详解_你回到了你的家的博客-CSDN博客
libpcap(packet capture library),即数据包捕获函数库,是Unix/Linux平台下的网络数据包捕获函数库。它是一个独立于系统的用户层的包捕获API接口,为底层网络监测提供了一个可移植的框架。
必须将-lpcap与gcc一起使用来编译libpcap程序,但我不知道此标志的含义。有谁能够帮助我??
例:
$ gcc lpcap_demo.c -o lpcap_output.o -lpcap
gcc -l指示GCC将程序与作为命令行选项指定的库链接,并且pcap为的名称libpcap。lib库名称的前缀是隐含的,因此,如果要编写-lpthread,将与libpthread,POSIX线程库-lrt链接,与链接librt,这是实时扩展库,依此类推,等等:)
是的,-lpcap只要您使用从pcap库中导出的符号,就必须进行编译。
您可以通过在终端中键入以下命令来获取更多信息:
man gcc
...并搜索-l选项。这是GCC的手册页: