linux qt 动态链接库 静态链接库
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
linux qt 动态链接库静态链接库学习笔记
/codeworkman/blog/item/32b6ccce51bf3622f9dc6141.ht ml
====hello.h====
#ifndef HELLO_H
#define HELLO_H
extern "C" void hello(const char *name);
#endif
====hello.c====
#include
#include "hello.h"
void hello(const char *name)
{
printf("Hello %s!\n", name);
}
====main.c====
#include "hello.h"
int main()
{
hello("everyone");
return 1;
}
[方案0]
gcc hello.c main.c
gcc hello.c main.c -o hello
[方案1]
gcc -c hello.c
gcc -c main.c
gcc hello.o main.o -o hello
[方案2静态库]
ar rcs libmyhello.a hello.o
gcc -o hello main.c -static -L. -lmyhello
[方案3动态库]
gcc -shared -fPIC -o libmyhello.so hello.o
gcc -o hello main.c -L. -lmyhello
mv libmyhello.so /usr/lib
[部分选项说明]
-shared //指定生成动态链接库,不用则相当于一个可执行文件
-fPIC //表示编译为位置独立的代码,否则达不到代码段共享的目的;
-L. //表示要链接的库在当前目录中
-ltest: //编译器查找动态库时有隐含的命名规则即在给出的前面加上lib,后面加上.so来确定名称
LD_LIBRARY_PATH://这个变量指示动态链接器可以装载动态库的路径LIBRARY_PATH: //指定程序静态链接库文件搜索路径
[qt使用静态库]
在qt creator的pro文件添加
LIBS += $(OutDir)libmyhello.a
LIBS += $(SOURCEDIR)/libmyhello.a
第1个是输出目录,第2个源程序目录,按自已习惯任选1个,之后copy文件libmyhello.a到你选择的目录中
在cpp文件#include "hello.h"
[qt使用动态库]
copy文件libmyhello.so到指定的链接库路径 /lib 或 /usr/local/lib
在qt creator的pro文件添加
LIBS += libmyhello.so
在cpp文件#include "hello.h"
[extern "C"]
文件hello.h中有extern "C"关键字,表示在c++环境中调用c函数
qt本身是由c++类构建的,因此当使用.c文件时,此关键字必须加上