Provided the one-letter-named directories already exist and every affected filename starts with a letter used to name those, I'd try something like this (it won't rename duplicates though)
Code:
find src/ -type f -name \*.so -execdir rename -n -v 's|^./(.)|dst/$1/$1|' {} \;
-n is there for testing it. Remove it to do the actual renaming.
This is Perl-based
rename, it may be alternatively called
prename or
file-rename in your distribution. Don't confuse it with less capable
rename from
util-linux.
As it allows arbitrary Perl code in its expressions, you probably can adapt it to handle duplicate renaming as well.