Russia's Sergey Kliugin overcame world record holder Javier Sotomayor as well as cold, wind and rain to win.
The silver went to Sotormayor of Cuba, who overcame a drug suspension and injuries to reach the Games. Abderrahmane Hammad of Algeria took bronze.
Kliugin was the only jumper to clear 2.35m, well short of Satormayor's record of 2.45m and American Charles Austin's Olympic mark of 2.39m.
Russia's Yelena Yelesina ended a 10-year wait to claim the Olympic high jump gold after a tense battle with South Africa's Hestrie Cloete.
The 30-year-old last won a major title when she took the European junior championship in 1989.
But the wait ended when she sailed over 2.01 metres at her second attempt, beating South Africa's Hestrie Cloete, who also cleared 2.01m but had more failures at lower heights.
There was a tie for the bronze medal between Kajsa Bergqvist, of Sweden, and Oana Manuela Pantelimon, from Romania - both clearing 1.99m.