My son has had similar problems since he was little. I know that it is REALLY HARD to do but you really have to let him just cry it out until he wears himself out and falls asleep on his own. Every time that you try to let him cry it out but then give in and pick him up you are only prolonging how long he will cry before going to sleep on his own. My son even cried for 3 hours one time.
What you need to do since he is certainly old enough to understand what you say is prepare him for it by talking to him about what's going to happen at bed time a few times during the day, tell him how this is the best for him and that he will sleep better and be happier once he learns how to sleep on his own "like a big boy" and then when it comes time for bed make sure that you have a routine that you follow, my son gets in his pj's, brushes his teeth and washes his face and then he reads with me and we have prayers and he goes to bed. Also, make sure that he has had plenty to eat, give him a cup of milk, soy has more protein so it may help him sleep better at night, it did with my son, and then start your routine.
The first night he may cry for so long that it breaks your heart and you desperately want to go take care of him but you have to stay strong and just let it play itself out. I promise that he will cry less, for the most part, every night after that until he gets to where he only cries for about 5 minutes or less most of the time, he's even have nights that he doesn't cry at all once he's used to it.
My son still cries sometimes but he can go for a month where he just gives me a kiss and lays down to sleep, sometimes he'll sit up after I've left and start talking to himself before he actually goes to sleep but he still stays quiet and goes to sleep by himself. It took a while to get here but you can do it too. Just hang in there, and if you need some extra support let me know, I know all about what you're going through and would be happy to help.