В 210 г. до н. э. Ганнибал нанес поражение римлянам во второй битве при Гердонии, а затем война шла в Апулии с переменным успехом. В начале следующего лета Квинт Фабий Максим осадил Тарент, хотя Ганнибал, стоявший в Бруттии, намеревался помешать ему. Марцелл, получивший задание отвлечь Ганнибала, преследовал его до Апулии, где возле Канусия произошло сражение, в котором победили римляне. Когда Ганнибал пришел к Таренту, то город уже был взят Фабием с помощью измены. В 208 г. до н. э. консул Тит Квинкций Криспин попытался захватить Локры, но Ганнибал помешал ему. Тогда Криспин объединился с консулом Марцеллом, чтобы дать Ганнибалу решающее сражение. Однако тот устроил римлянам засаду, в которой погиб один консул, другой был серьезно ранен. После этого Ганнибал попытался хитростью взять Салапию, но ему это не удалось: его замысел был раскрыт.
Свои надежды на продолжение успешной войны в Италии Ганнибал возлагал на соединение со своим братом Гасдрубалом, шедшим из Испании. Консул Гай Клавдий Нерон двинулся против Ганнибала и одержал победу при Грументе. Тем временем Гасдрубал уже был в Италии, но его письмо брату было перехвачено римлянами. Пользуясь ситуацией, два римских консула нанесли поражение войску Гасдрубала, а сам он погиб в бою. Карфаген не имел больше возможности направить войска на помощь Ганнибалу, и ему пришлось покинуть Апулию и Луканию, отступив в Бруттий.
В последние два года для победы в борьбе с Карфагеном Рим сумел собрать значительные силы. Вопреки традициям Римской республики, армия была пополнена заключенными рабами, выкупленными за счет государства. Командующий римской армией консул Публий Корнелий Сципион («Сципион Африканский») перенес театр военных действий в Африку, чтобы вырвать инициативу из рук карфагенской армии. Отличным трамплином для переброски войск в Африку стала Сицилия. В 204 г. до н. э. Сципион с 30-тысячной армией высадился на африканский берег вблизи города Утика.
Карфагенское руководство немедленно обратились к своему самому лучшему полководцу с просьбой вернуться из Европы и защитить свою страну. Летом 203 г. до н. э. Ганнибал получил приказ вернуться в Африку. «Уже без хитростей, уже открыто отзывают меня те, кто давно еще силился меня отсюда убрать, отказывая в деньгах и солдатах, – говорил полководец. – Победил Ганнибала не римский