linux qt 动态链接库 静态链接库

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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文件时,此关键字必须加上

相关文档
最新文档