Получив власть в Испании, Ганнибал стал готовиться к войне с Римом. И карфагеняне, и римляне считали, что вторая война будет решительной. Вопрос теперь шёл о том, кто будет господствовать на Средиземном море – Карфаген или Рим.
Весной 219 г. до н. э. Ганнибал осадил союзный с Римом город Сагу́нт, лежавший на восточном берегу Испании. После восьми месяцев осады город был взят. Римские послы явились в Карфаген и потребовали выдачи Ганнибала. Карфагенское правительство отказало. Тогда римские послы объявили Карфагену войну.
Римляне предполагали напасть на карфагенян одновременно в Африке и в Испании. Но Ганнибал спутал все планы римлян.
Весной 218 г. до н. э. Ганнибал перешёл Пиренейские горы и двинулся в Италию. С ним было отборное войско, состоявшее из 50 тысяч пехоты, 9 тысяч конницы и нескольких десятков слонов. Ганнибал надеялся, что италийские племена, покорённые Римом (в особенности галлы), перейдут на сторону Карфагена. Армия Ганнибала шла вдоль южного побережья Галлии к нижнему течению реки Роны. Перейдя через реку, Ганнибал двинулся вверх по Роне, свернул на восток и подошёл к главному Альпийскому хребту.
Переход через горы был очень труден. Наступал сентябрь, и в горах уже появился снег. Слоны, лошади и люди скользили и падали в пропасть. Горцы встретили карфагенян враждебно и постоянно тревожили их внезапными нападениями. Наконец, в конце октября измученное войско спустилось в равнины Северной Италии. У Ганнибала осталось только 20 тысяч пехотинцев, 6 тысяч всадников почти без лошадей и всего лишь один слон. После передышки и пополнения армии галлами Ганнибал вторгся в долину реки По. В 218 г. он нанёс здесь поражение римскому войску.
Ранней весной Ганнибал двинулся в Этрурию, где его ожидала на укреплённых позициях римская армия во главе с консулом Флами́нием. Но Ганнибал обошёл её, проведя своё войско по непроходимым болотам, и очутился впереди римской армии. Фламиний бросился вдогонку карфагенянам и попал в засаду, устроенную ему Ганнибалом в узкой долине на берегу Тразименского озера.
Переправа войск Ганнибала через р. Рону (по современной гравюре)
Римская армия частью была уничтожена, частью попала в плен; сам консул Фламиний погиб в битве.
Известие о новом поражении вызвало ужас в Риме. Ввиду надвинувшейся опасности решено было назначить диктатора. Выбор остановился на аристократе Фабии Ма́ксиме. Фабий применил в борьбе с Ганнибалом новую тактику: римляне шли по пятам за карфагенской армией, утомляя её мелкими стычками, но избегали решительного сражения. Сельским жителям было приказано уничтожать свои жилища и запасы продовольствия и укрываться в городах. Такая тактика лишала армию Ганнибала продовольствия, но вызывала и негодование крестьян, имущество и поля которых разорялись. В народе Фабию Максиму дали насмешливое прозвище Кунктатор, что значит «Медлитель».
В 216 г. до н. э. демократическая партия добилась того, что ведение войны было поручено не диктатору, а консулам. Были выбраны консулами Теренций Варро́н и Эмилий Павел. Решено было дать генеральное сражение карфагенянам.
Ганнибал в это время находился в Апулии. Здесь, при городе Канны, и произошла знаменитая битва.
Ганнибал составил простой и смелый план сражения. Он построил свою армию в форме полумесяца, обращённого выпуклой стороной к римлянам. В центре он поставил свои худшие войска, а на флангах – лучшие. Римская пехота стремительно бросилась на центр карфагенской армии, который стал отступать.
В этот момент Ганнибал ударил во фланг римлянам свежими войсками, а карфагенская конница, опрокинув более слабую римскую, окружила пехоту с тыла. Началось страшное избиение римской армии. Она потеряла около 70 тысяч человек. В этой битве погибли консул Эмилий Павел и почти весь высший командный состав (июнь 216 г. до н. э.).
Победа Ганнибала при Каннах сильно ухудшила положение Рима. От Рима отпали Сиракузы; Риму изменила также часть Южной Италии, в том числе большой город Ка́пуя.
Но римляне не пали духом и с величайшей энергией продолжали борьбу. Сенат объявил новый набор воинов в армию, начиная с семнадцатилетнего возраста, Ганнибалу же пополнять свои войска было очень трудно. Карфагенское правительство почти не помогало своему полководцу: оно боялось, что Ганнибал, вернувшись на родину после победы над Римом, захватит царскую власть. Вот почему силы Рима росли, несмотря на поражения, а силы Ганнибала таяли.
Вскоре римлянам удалось завладеть Сиракузами. Затем после долгой осады им сдалась Капуя. В это время Ганнибал сделал попытку напасть на сам Рим. Он уже был в восьми километрах от города. Население было охвачено ужасом. Раздавались крики: «Ганнибал у ворот!» Однако карфагеняне не решились пойти на штурм Рима.
У Ганнибала была надежда на помощь из Испании, где оставалось войско его брата Газдруба́ла. Но римляне перехватили письмо, которым Газдрубал извещал брата о своём маршруте. Сильная римская армия была брошена навстречу Газдрубалу, и карфагенское войско было целиком истреблено. Ганнибал всё время тщетно ожидал известий от брата. Только тогда, когда римляне бросили в его лагерь голову Газдрубала, Ганнибал понял, что произошло.
Упрочив своё положение в Италии и очистив Испанию от карфагенских войск, римляне решили перенести войну в Африку. Римский полководец Сципио́н переправился туда с тридцатитысячной армией. Карфагенский сенат вызвал из Италии Ганнибала. В 202 г. до н. э. оба полководца встретились близ города Замы, к югу от Карфагена. Благодаря помощи нумидийского царя конница Сципиона превосходила карфагенскую, и Ганнибал был разбит.
Карфагенское правительство вынуждено было согласиться на те условия мира, которые ему предписали римляне. По этому миру Карфаген терял все свои владения, лежавшие вне Африки, и не имел права вести войну без согласия Рима. Кроме того, Карфаген должен был выплатить огромную военную контрибуцию и отдать всех своих слонов и весь военный флот, за исключением 10 судов.
Так кончилась в 201 г. до н. э. самая тяжёлая и опасная война, какую когда-либо вёл Рим. Победитель Ганнибала, Публий Корнелий Сципион, получил прозвище Африканского.
Через несколько лет после заключения мира римский сенат потребовал от Карфагена выдачи Ганнибала. Не желая попасть в руки врагов, великий полководец бежал в Азию и там погиб.
Рим победил Ганнибала потому, что римская крестьянская армия превосходила наёмные карфагенские войска. Римские войска, боровшиеся за свои поля, оказались более стойкими, чем наёмники Ганнибала, мало заинтересованные в победе Карфагена.
Кроме того, Карфаген не посылал своему талантливому полководцу свежих подкреплений. Некоторые изменники-карфагеняне даже выступали против Ганнибала. Все эти обстоятельства дали перевес Риму, который и победил.