首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

linux脚本版本化 求解释途经都来看看哟

2012-08-17 
linux脚本版本化 求解释路过都来看看哟对于这个简单的例子我有几个问题 望大家帮助C/C++ code$ cat foo.c#

linux脚本版本化 求解释路过都来看看哟
对于这个简单的例子我有几个问题 望大家帮助

C/C++ code
$ cat foo.c#include <stdio.h>#ifndef VERSION_2void foo(int f) {     printf("version 1 called\n");}#elsevoid foo_v1(int f) {     printf("version 1 called\n");}__asm__(".symver foo_v1,foo@VERSION_1");void foo_v2(int f) {     printf("version 2 called\n");}/* 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.verVERSION_1 {      global:      foo;      local:        *;};$ cat 2.verVERSION_1 {      local:        *;};VERSION_2 {      foo;} VERSION_1;$ cat main.c#include <stdio.h>void foo(int);int main(void) {    foo(100);    return 0;}$ cat Makefileall: v1 v2libfoo.so.1 : foo.c        gcc -shared -fPIC -o libfoo.so.1 -Wl,--soname='libfoo.so.1' -Wl,--version-script=1.ver foo.clibfoo.so.2 : foo.c        gcc -shared -fPIC -DVERSION_2 -o libfoo.so.2 -Wl,--soname='libfoo.so.2' -Wl,--version-script=2.ver foo.cv1: main.c libfoo.so.1    ln -sf libfoo.so.1 libfoo.so    gcc -Wall -o v1 -lfoo -L. -Wl,-rpath=. main.cv2: main.c libfoo.so.2    ln -sf libfoo.so.2 libfoo.so    gcc -Wall -o v2 -lfoo -L. -Wl,-rpath=. main.c.PHONY: cleanclean:    rm -f libfoo* v1 v2$ ./v1version 1 called$ ./v2version 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 

热点排行