现在的位置: 首页 > 综合 > 正文

linux qt 动态链接库 静态链接库 学习笔记

2013年08月03日 ⁄ 综合 ⁄ 共 1163字 ⁄ 字号 评论关闭

http://hi.baidu.com/codeworkman/blog/item/32b6ccce51bf3622f9dc6141.html
====hello.h====
#ifndef HELLO_H
#define HELLO_H
extern "C" void hello(const char *name);
#endif

====hello.c====
#include <stdio.h>
#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文件时,此关键字必须加上
 

 

抱歉!评论已关闭.