第一次布匿戰爭並未徹底解決羅馬與迦太基之間的爭端,戰敗的迦太基不肯善罷幹休,積極作反擊羅馬的準備。到漢尼拔掌握軍政時,迦太基人認為已有足夠的力量同羅馬人再較量。公元前219年,漢尼拔攻占了不願歸附迦太基的薩貢托城,羅馬出麵幹涉並以戰爭相威脅,於是爆發了第二次布匿戰爭(公元前218-前201)。戰爭伊始,迦太基軍統帥漢尼拔率9萬步兵、1200騎兵和37頭戰象由西班牙出發,衝破了重重險阻,越過阿爾卑斯山進入意大利,打破了羅馬人想把戰爭局限在西班牙和北非,避免在意大利東土作戰的計劃,使羅馬處於被動地位。漢尼拔在波河流域首戰告捷。公元前217年,在特拉西美諾湖附近,漢尼拔又巧妙地運用迂回戰術大敗羅馬,羅馬軍幾乎全軍覆沒,執政官陣亡。公元前216年,羅馬征集8萬軍隊與漢尼拔會戰於坎奈。漢尼拔采用兩翼包抄戰術,以少勝多,幾乎全殲羅馬軍。但是,漢尼拔的這些勝利隻限於南意大利,並沒有從根本上摧毀羅馬的軍事力量。相反由於他孤懸敵境,給養、兵源都不能及時得到解決,戰鬥力逐漸削弱。公元前204年,羅馬軍隊在迦太基附近登陸,漢尼拔被本國政府急令召回。公元前202年,雙方在迦太基的紮瑪附近進行了決定性的會戰,漢尼拔戰敗。次年迦太基被迫求和,根據和約,迦太基放棄非洲以外的全部領土,賠款1萬塔蘭特,不經羅馬允許,迦太基不得對外進行戰爭。