После смерти Гасдрубала армия выбрала Ганнибала — сына Гамилькара — главнокомандующим. Всех своих детей — Магона, Гасдрубала и Ганнибала — Гамилькар воспитывал в духе ненависти к Риму, поэтому, получив контроль над армией, Ганнибал начал искать повод для войны. В 218 году до н. э. он захватил Сагунт — испанский город и союзник Рима — война началась. Неожиданно для врага Ганнибал провёл свою армию в обход через Альпы на территорию Италии. Там он одержал ряд побед — при Тицине, Требии и Тразименском озере. В Риме назначили диктатора, но в 216 году до н. э. у города Канны Ганнибал нанёс римлянам сокрушительное поражение, следствием которого был переход на сторону Карфагена значительной части Италии, и второго по значению города — Капуи. Боевые действия велись и в Испании, и на Сицилии. Первоначально успех сопутствовал Карфагену, но затем римляне сумели одержать ряд важных побед. С гибелью брата Ганнибала — Гасдрубала, который вёл ему значительные подкрепления, — положение Карфагена очень сильно осложнилось. Высадка Магона в Италии была безрезультатна — он потерпел поражение и был убит в бою. Вскоре Рим перенёс боевые действия в Африку. Заключив союз с царём нумидийцев Массиниссой, Сципион нанёс пунийцам ряд поражений. Ганнибала вызвали на родину. В 202 году до н. э. в битве у Замы, командуя плохо обученным войском, он потерпел поражение, и карфагеняне решили заключить мир. По его условиям они были вынуждены отдать Риму Испанию и все острова, содержать только 10 боевых кораблей и выплатить талантов контрибуции. Кроме того, они не имели права воевать с кем-либо без разрешения Рима.