当前位置: 技术问答>linux和unix
linux脚本版本化 求解释路过都来看看哟
来源: 互联网 发布时间:2017-03-05
本文导语: 对于这个简单的例子我有几个问题 望大家帮助$ cat foo.c #include #ifndef VERSION_2 void foo(int f) { printf("version 1 calledn"); } #else void foo_v1(int f) { printf("version 1 calledn"); } __asm__(".symver foo_v1,foo@VERSION_1")...
对于这个简单的例子我有几个问题 望大家帮助
1.foo_v1这个函数在什么情况下被用到
2.2.ver中foo是那种类型,如果是local类型,怎么被应用?
3.global与local不同是一个导出一个不导出,但是都能被外部应用?
$ cat foo.c
#include
#ifndef VERSION_2
void foo(int f) {
printf("version 1 calledn");
}
#else
void foo_v1(int f) {
printf("version 1 calledn");
}
__asm__(".symver foo_v1,foo@VERSION_1");
void foo_v2(int f) {
printf("version 2 calledn");
}
/* i.e. foo_v2 is really foo@VERSION_2
* @@ means this is the default version
*/
__asm__(".symver foo_v2,foo@@VERSION_2");
#endif
$ cat 1.ver
VERSION_1 {
global:
foo;
local:
*;
};
$ cat 2.ver
VERSION_1 {
local:
*;
};
VERSION_2 {
foo;
} VERSION_1;
$ cat main.c
#include
void foo(int);
int main(void) {
foo(100);
return 0;
}
$ cat Makefile
all: v1 v2
libfoo.so.1 : foo.c
gcc -shared -fPIC -o libfoo.so.1 -Wl,--soname='libfoo.so.1' -Wl,--version-script=1.ver foo.c
libfoo.so.2 : foo.c
gcc -shared -fPIC -DVERSION_2 -o libfoo.so.2 -Wl,--soname='libfoo.so.2' -Wl,--version-script=2.ver foo.c
v1: main.c libfoo.so.1
ln -sf libfoo.so.1 libfoo.so
gcc -Wall -o v1 -lfoo -L. -Wl,-rpath=. main.c
v2: main.c libfoo.so.2
ln -sf libfoo.so.2 libfoo.so
gcc -Wall -o v2 -lfoo -L. -Wl,-rpath=. main.c
.PHONY: clean
clean:
rm -f libfoo* v1 v2
$ ./v1
version 1 called
$ ./v2
version 2 called
1.foo_v1这个函数在什么情况下被用到
2.2.ver中foo是那种类型,如果是local类型,怎么被应用?
3.global与local不同是一个导出一个不导出,但是都能被外部应用?
|
你将上边两个文件分别在两个文件夹中编译一个产生v1一个产生v2,把v1在v2这个文件夹中运行时它会用带libfoo.so.2中的就函数就是你说的foo_v1函数
查看动态库导出用nm指令 具体你看手册
http://topic.csdn.net/u/20120716/14/aaab937b-fd6b-420e-b239-3bb009fa0cf4.html
查看动态库导出用nm指令 具体你看手册
http://topic.csdn.net/u/20120716/14/aaab937b-fd6b-420e-b239-3bb009fa0cf4.html
|
貌似是用来区别动态库版本的。