I do not have the definite answer but I was fighting the same problem recently and this are my findings. Hopefully someone will verify.
LOCAL_LDLIBS and LOCAL_SHARED_LIBRARIES are both used to link libraries.
However LOCAL_SHARED_LIBRARIES is looking for intermediate objects and if not found the library is being rebuilt.
LOCAL_LDLIBS expects to find final library.
They both work under SDK and NDK.
I experienced the problem of LOCAL_LDLIBS not working while building the android platform or to be more specific one of its components, camera.
The reason why LOCAL_LDLIBS does not work is that it does not appear in link command at all.
I.e. when you build inside the component folder (cameraHAL in my case)
mm showcommands (first do . build/envsetup.sh in main folder), the link command have no indication of anything specified for LOCAL_LDLIBS.
Why is that?
I believe the logic is that when building the android you are expected to have all the sources hence using LOCAL_SHARED_LIBRARIES is the right way to go.
LOCAL_LDFLAGS vs LOCAL_LDLIBS.
The LOCAL_LDFLAGS is used to pass any flags, not only libraries to link, hence it appears in link command.
The LOCAL_LDLIBS is only for linking libraries and only for use under NDK/SDK.