Když Hamilkarův syn Hannibal napadl v roce 219 př. n. l. město Saguntum, které sice bylo římským spojencem, ale leželo jižně od řeky Ebro, žádali Římané Hannibalovo vydání. Po zamítavé reakci z Kartága vypukla mezi Římany a Kartáginci druhá punská válka (218–201 př. n. l.). Hannibal podnikl namáhavou a strastiplnou cestu Hispánií a jižní Galií a po překročení Alp vpadl se svým vojskem do Itálie. Po sérii několika geniálních vítězstvích nad Římany, v bitvě u Trasimenského jezera a především v bitvě u Kann v roce 216 př. n. l. (jednalo se o nejtěžší porážku v římských dějinách vůbec), přivedl Hannibal Řím na pokraj záhuby. V tomto osudovém momentě se však opět osvědčila vnitřní semknutost římské společnosti a nezdolnost římského spojeneckého systému, takže i přes svá vítězství zůstal Hannibal v Itálii víceméně izolován. Římská protiofenzíva přivedla válku na Sicílii a do punské Hispánie. Římský vojevůdce Scipio Africanus, který dobyl na Kartágincích Hispánii, se v roce 204 př. n. l. přesunul do severní Afriky a v roce 202 př. n. l. porazil Hannibala v rozhodující bitvě u Zamy.