I am encountering a different behavior between OS X and Android:
foo
in my shared library,Android doesn't support weak symbol override.
In the recent release android-5.0.2_r1, see the comment at line 539 in linker.cpp source code
/*
*
* Notes on weak symbols:
* The ELF specs are ambigious about treatment of weak definitions in
* dynamic linking. Some systems return the first definition found
* and some the first non-weak definition. This is system dependent.
* Here we return the first definition found for simplicity.
*/
This comment exists from version 2.2_r1 (which is in linker.c) to newest version 5.0.2_r1
Android dynamic linker does in fact support weak symbols. The problem is this particular case is that library is compiled with -Bsymbolic (to check this run "readelf -d libshared.so").
The work around this is to use '-Wl,-shared' instead of '-shared' when linking the library.
Please see https://code.google.com/p/android/issues/detail?id=68956 for details and workaround.