linux dynamic lib

1 // test1.h
2 int a = 10;
3 struct AA
4 {
5     int a,b:
6 }; AA b(5,6);
7 int ball();
 1 // test1.cpp
 2 # include"test1.h"
 3
 4 // the following line is invalid for it will not executed( if it‘s initialization of a var, it‘s valid)
 5 // a = 11;
 6
 7 int ball()
 8 {
 9     a =13;
10     b = AA(3,4);
11     return a+4;
12 }

build a lib with command line : g++ -fPIC -shared test1.cpp -o libtt.so

# include<iostream>
using namespace std;

extern int a;
extern int b;
int ball();

int main()
{
    cout << " call ball() " << ball() <<endl;
    cout << "value of a " << a <<endl;
    cout << "value of b" << b << endl;
}

to build an executable with command line: g++ test-main.cpp -L./ -ltt

Notice:

  • in test-main.cpp, we can‘t use " int a" instead of "extern int a", because "int a" is a declaration, which also can be a defination.
  • wahile we can use " int ball()" instread of "extern int ball()" because " int ball() " will never be seen as a defination.
  • in test1.h, dont define "int a" with prefix ‘ extern "C" ‘, because in the symbol table of it‘s lib, the name of variable is the symbol
  • in test-main.cpp, we assume b is of type int and succeeds, because the symbol of b is "b", has no other information
  • C or C++ excutable can get the value of a/b; but if C wants to call ball() from a C++ lib, we should add the prifix " extern "C" " to "int ball()"
时间: 2024-10-12 08:36:17

linux dynamic lib的相关文章

static and dynamic lib

Windows下的dll和lib 简介 DLL就是动态链接库 LIB是静态链接库 DLL是程序在运行阶段才需要的文件 LIB是程序编译时需要链接的文件 使用静态库 静态库实际上是obj文件打包而成 使用静态库时 在程序中加入 #pragma comment(lib, "WSock32.lib") 或者通过编译器项目设置中 手动添加Lib静态库 这样在链接程序 就会将静态库链接到程序里面 生成一个可执行文件或其他目标文件 使用动态库 动态库是一个标准的PE文件 经过编译器编译链接的 动态

static lib和dynamic lib

lib分为 staticlib 和 dynamic lib: 静态lib将导出声明和实现都放在lib中,编译后所有代码都嵌入到宿主程序, 链接器从静态链接库LIB获取所有被引用函数,并将库同代码一起放到可执行文件中. 动态lib相当于一个h文件,是对实现部分(.dll文件)的导出部分的声明,编译后只是将导出声明部分编译到宿主程序中,运行时候需要相应的dll文件支持, 包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic

linux:/lib/libc.so.6: version `glibc_2.7′ not foun

刚用户反映服务器rar版本低,下了个4.0的运行提示 /lib/libc.so.6: version `GLIBC_2.7′ not found 升级了centos的glibc库 yum -y update glibc 问题依旧.用命令查看glibc库的信息 rpm -qi glibc 显示系统的glibc库版本为2.5 在CentOS中用更新命令到2.5已经是最新版本了,只好手动下载 glibc 2.7 的源码包编译安装更新: 地址:http://ftp.gnu.org/pub/gnu/gli

linux:/lib/libc.so.6: version `glibc_2.7′ not found【解决】

1 下载glibc wget http://ftp.gnu.org/pub/gnu/glibc/glibc-2.7.tar.gz 2. tar zxf glibc-2.7.tar.gz 3. cd glibc-2.7 4. mkdir build #这里必须新建一个目录 5.   cd build6. 执行 ../configure –disable-sanity-checks 7 make && make install 此过程大概30 – 1小时 .  慢慢等吧.

Linux入门之CentOS7内核编译三部曲(1)

Linux入门之CentOS7内核编译三部曲(1) 我们知道,一个Linux系统的主要组成是由liunx内核核心和一些支持模块组合而成的.但是在某些场合中,需要某项功能,而当前内核的核心或者模块不支持此功能,那么就需要对内核进行一个升级或者重新编译内核添加相应的功能,以此提供了对此功能的支持. 编译前的准备 认识kernel 所为kernel,就是一种操作系统的核心,当然也是一个文件,而这种核心提供了对一些硬件的支持,一般来说其中包含了一些对常见硬件核心驱动的核心代码.启动系统时会通过加载MBR

【Linux 相关】 静态库与动态库的编译和使用

参考博客 http://www.cnblogs.com/feisky/archive/2010/03/09/1681996.html 上述博客中关于静态库与动态库的讲解,很清晰! 库的定义: 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 静态库和动态库的区别 1. 静态函数库 这类库的名字一般是libxxx.a:利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数

FTP Account Weak Password Detection By Dynamic port scan And Socket Connection Try

catalog 1. FTP弱密码导致的入侵向量 2. FTP Listening端口动态扫描 3. 根据Banner判断目标端口是否为FTP服务 4. 基于Socket TCP FTP连接.FTP登录控制协议的自动化弱密码检测 1. FTP弱密码导致的入侵向量 1. 网站管理员常常把FTP的根目录配置为WWW(WEB目录),以此来方便网站的管理工作 2. 黑客猜解到FTP的弱密码之后,即可获取到WWW网站的敏感配置文件 3. 如果猜解到的账号具有目录/文件写权限,黑客可以向WWW网站目录下写入

为 Linux 应用程序编写 DLL[转]

自:http://www.ibm.com/developerworks/cn/linux/sdk/dll/index.html 在仅仅只会编写插件的时候为什么要编写整个应用程序? 插件和 DLL 通常是用来无须编写整个新应用程序而添加功能的极好方法.在 Linux 中,插件和 DLL 是以动态库形式实现的.电子商务顾问兼设计师 Allen Wilson 介绍了动态库,并且向您演示了如何在某一个应用程序正在运行之后使用动态库来更改该应用程序. Allen Wilson ([email protec

linux内核编译与开发

一.Linux内核简介linux kernel map: linux 系统体系结构: linux kernel体系结构: arm有7种工作模式,x86也实现了4个不同级别RING0-RING3,RING0级别最高, 这样linux用户代码运行在RING3下,内核运行在RING0,这样系统本身就得到了 充分的保护 用户空间(用户模式)转到内核空间(系统模式)方法: ·系统调用 ·硬件中断 linux kernel 体系结构: 虚拟文件系统VFS: VFS(虚拟文件系统)隐藏各种文件系统的具体细节,