第一次布匿战争并未彻底解决罗马与迦太基之间的争端,战败的迦太基不肯善罢干休,积极作反击罗马的准备。到汉尼拔掌握军政时,迦太基人认为已有足够的力量同罗马人再较量。
公元前219年,汉尼拔攻占了不愿归附迦太基的萨贡托城,罗马出面干涉并以战争相威胁,于是爆发了第二次布匿战争(公元前218—前201)。战争伊始,迦太基军统帅汉尼拔率9万步兵、1200骑兵和37头战象由西班牙出发,冲破了重重险阻,越过阿尔卑斯山进入意大利,打破了罗马人想把战争局限在西班牙和北非,避免在意大利东土作战的计划,使罗马处于被动地位。汉尼拔在波河流域首战告捷。公元前217年,在特拉西美诺湖附近,汉尼拔又巧妙地运用迂回战术大败罗马,罗马军几乎全军覆没,执政官阵亡。公元前216年,罗马征集8万军队与汉尼拔会战于坎奈。汉尼拔采用两翼包抄战术,以少胜多,几乎全歼罗马军。但是,汉尼拔的这些胜利只限于南意大利,并没有从根本上摧毁罗马的军事力量。相反由于他孤悬敌境,给养、兵源都不能及时得到解决,战斗力逐渐削弱。公元前204年,罗马军队在迦太基附近登陆,汉尼拔被本国政府急令召回。公元前202年,双方在迦太基的扎玛附近进行了决定性的会战,汉尼拔战败。次年迦太基被迫求和,根据和约,迦太基放弃非洲以外的全部领土,赔款1万塔兰特,不经罗马允许,迦太基不得对外进行战争。