Linux静态和动态链接库使用实例
Ø 不同于Win32DLL,Linux标准对象中的所有函数都是直接导出的,都可以被调用程序所访问。也就是说不用头文件即可被导出。
Ø 静态和动态的区别
静态库的代码在编译时已经进入被包含到目标文件了;而动态库的代码要在目标文件运行的时候才会被包含进去,在编译的时候只是对动态库进行一个链接。
1、静态链接库实例
//fun1.h
#include <stdio.h>
void fun1printf();
////////////////////////////////////////////////////////////////////////////////////////////
//fun1.c
#include "fun1.h"
void fun1printf()
{
printf("fun1printf!/n");
}
////////////////////////////////////////////////////////////////////////////////////////////////
//fun2.h
#include <stdio.h>
void fun2printf();
////////////////////////////////////////////////////////////////////////////////////////////////
//fun2.c
#include "fun2.h"
void fun2printf()
{
printf("fun2printf!/n");
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
//staticcall.c
#include <stdio.h>
int main()
{
fun1printf();//不需要导入,直接引用函数
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
//makefile
all:staticlib main
staticlib:fun1.c fun2.c
gcc -c -o fun1.o fun1.c
gcc -c -o fun2.o fun2.c
ar cqs libfun.a fun1.o fun2.o
main:staticcall.c libfun.a
gcc -o staticcall staticcall.c -L ./ -lfun
|
生成静态链接库的命令是ar cqs。
2、动态链接库实例
所有文件同静态链接库,只是makefile编写不一样。
all:sharedlib sharedcall
sharedlib:fun1.c fun2.c
gcc -fPIC -c fun1.c -o fun1.o
gcc -fPIC -c fun2.c -o fun2.o
gcc -shared fun1.o fun2.o -o libfun.so
sharedcall:
gcc -o sharedcall -L ./ -lfun sharedcall.c
|
编译生成动态链接库的文件时,必须加上-fPIC,Position Independent Code(地址无关编码)。
在运行程序之前,必须:
Ø export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/ccode/dll/
Ø 在/etc/ld.so.conf中添加/root/ccode/dll/路径
分享到:
相关推荐
Linux C 静态链接库 动态链接库 简单介绍 看完本例子,可以入门了。。。。
linux shell下的静态链接库和动态链接库实例(脚本).docx
注意其中使用函数返回基类指针的用法,因为Linux的动态链接库不能像MFC中那样直接导出类 一、介绍 如何使用dlopen API动态地加载C++函数和类,是Unix C++程序员经常碰到的问题。 事实上,情况偶尔有些复杂,需要...
Linux静态库与动态库实例详解 1. Linux 下静态链接库编译与使用 首先编写如下代码: // main.c #include test.h int main(){ test(); return 0; } // test.h #include using namespace std; void test(); // test...
Linux下动态库文件的扩展名为\".so\"(Shared Object)。按照约定,所有动态库文件名的形式是libname.so(可能在名字中加入版本号)。这样,线程函数库被称作...本文仅以简单的例子介绍动态库文件的生成和链接方法。
2.2.9 生成动态链接库 26 2.2.10 动态加载库 29 2.2.11 GCC常用选项 31 2.2.12 编译环境的搭建 33 2.3 Makefile文件简介 34 2.3.1 一个多文件的工程例子 34 2.3.2 多文件工程的编译 36 2.3.3 Makefile...
2.2.9 生成动态链接库 26 2.2.10 动态加载库 29 2.2.11 GCC常用选项 31 2.2.12 编译环境的搭建 33 2.3 Makefile文件简介 34 2.3.1 一个多文件的工程例子 34 2.3.2 多文件工程的编译 36 2.3.3 Makefile...
《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...
2.2.9 生成动态链接库 26 2.2.10 动态加载库 29 2.2.11 GCC常用选项 31 2.2.12 编译环境的搭建 33 2.3 Makefile文件简介 34 2.3.1 一个多文件的工程例子 34 2.3.2 多文件工程的编译 36 2.3.3 Makefile...
10.7 微软动态链接库 10.8 OSF/1伪静态共享库 10.9 让共享库快一些 10.10 几种动态链接方法的比较 练习 项目 第11章 高级技术 11.1 C++的技术 11.2 增量链接和重新链接 11.3 链接时的垃圾收集 11.4 链接时优化 ...
libharu2.3.0开源PDF读写库,这是一个非常简洁短小的库,只依赖libpng和zlib库,使用非常方便。缺点是对Unicode支持不是很...完美编译了静态库、dll动态库四个版本,推荐使用dll版本库,不在额外需要其他静态库的链接。
详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64加解密、哈希加解密以及其它的文件加解密),分静态库和动态库方法。 JSCalls_demo js调用的演示源码 树控件拖动 演示了在树控件中来回拖动...
实例052 使用位运算对数字进行加密和解密 83 2.3 包含语句 84 实例053 提高代码重用率 84 实例054 包含数据库连接文件 85 实例055 包含网站头文件 86 实例056 包含网站尾文件 87 实例057 包含网站的主文件 88 2.4 ...
实例052 使用位运算对数字进行加密和解密 83 2.3 包含语句 84 实例053 提高代码重用率 84 实例054 包含数据库连接文件 85 实例055 包含网站头文件 86 实例056 包含网站尾文件 87 实例057 包含网站的主文件 88 2.4 ...
vc++动态链接库编程之DLL典型实例源代码下载 VC++仿Dreamweaver取色器源代码 VC++挂机锁屏系统源程序 VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本...
vc++动态链接库编程之DLL典型实例源代码下载 VC++仿Dreamweaver取色器源代码 VC++挂机锁屏系统源程序 VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本...
vc++动态链接库编程之DLL典型实例源代码下载 VC++仿Dreamweaver取色器源代码 VC++挂机锁屏系统源程序 VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本...
vc++动态链接库编程之DLL典型实例源代码下载 VC++仿Dreamweaver取色器源代码 VC++挂机锁屏系统源程序 VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本...
vc++动态链接库编程之DLL典型实例源代码下载 VC++仿Dreamweaver取色器源代码 VC++挂机锁屏系统源程序 VC++建立桌面或开始菜单快捷方式 VC++界面库编程 SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本...