hi, It looks like I am pretty unlucky with this so, it is quite likely I have missed something important. Help would be welcome. mathieu@mathieu:~/code$ cat test.c void test (void) {} mathieu@mathieu:~/code$ cat test.map A { global: test; local: *; }; B { global: test; } A; mathieu@mathieu:~/code$ gcc -O0 -g -fpic -c test.c -o test.o mathieu@mathieu:~/code$ gcc -shared -Wl,--version-script=./test.map ./test.o -o test.so mathieu@mathieu:~/code$ readelf -V -s ./test.so |grep test 5: 0000039c 5 FUNC GLOBAL DEFAULT 12 test@@A 48: 00000000 0 FILE LOCAL DEFAULT ABS test.c 62: 0000039c 5 FUNC GLOBAL DEFAULT 12 test 000000: Rev: 1 Flags: BASE Index: 1 Cnt: 1 Name: test.so mathieu@mathieu:~/code$ The above shows that test is exported under version 'A' as the default symbol. I was expecting instead something like that (imaginary output): 5: 0000039c 5 FUNC GLOBAL DEFAULT 12 test@A 5: 0000039c 5 FUNC GLOBAL DEFAULT 12 test@@B which would indicate that symbol test is exported under both version A and B and that B is the 'default' version. What step did I miss to get this result ? Mathieu -- Mathieu Lacage <mathieu.lacage@xxxxxxxxx>