Рим опасался чрезмерного усиления Нумидии и решил не допустить захвата Карфагена Масиниссой, но в то же время решил использовать факт нарушения карфагенянами одного из условий мира как предлог для объявления им войны. Решение сената по этому вопросу, однако, держалось в тайне. В 149 г. до н. э. четыре римских легиона, 4000 конницы италийских союзников и несколько десятков тысяч добровольцев (в общей сложности около 80 000 воинов) отплыли с Сицилии на 150 кораблях. Флотом командовал консул Луций Марций Цензорин, а сухопутной армией — консул Маний Манилий. К счастью для карфагенян, ни один из них не был полководцем. Цензорин был по призванию философом, а Манилий — образованным оратором. Оба они высадились в Утике и от прибывших карфагенских послов потребовали, чтобы город в знак своей покорности выдал все оружие. Правившие в городе аристократы решили исполнить это требование и выдали римлянам 2000 катапульт и 200 000 единиц различного оружия. Лишь тогда консулы объявили решение римского сената: карфагеняне должны покинуть свой город, который будет разрушен, и поселиться на расстоянии не менее пятнадцати километров от моря.
Карфагенян охватили отчаяние и ярость. Было решено защищаться. Продавшиеся Риму аристократы были отстранены от власти. Демократы же заключили союз со сторонниками Масиниссы, которые вернулись в город. Полагали, что удастся заручиться помощью нумидийского царя, возмущенного тем, что римляне не согласились с его планом присоединения Карфагена к Нумидии. Власть в городе принял суффет Гасдрубал, по матери внук Масиниссы. Вождем тридцатитысячной армии стал призванный из изгнания главнокомандующий Гасдрубал, неудачливый предводитель недавнего похода против нумидийцев.
После долгого промедления, когда уже ряд карфагенских городов сдался добровольно, оба консула наконец приступили к осаде самого Карфагена с суши и с моря. Гасдрубал со своим войском встал в укрепленном лагере под Неферисом и, пока штурмы римлян разбивались о тройную оборонительную стену города, изматывал их партизанской войной, затрудняя подвоз продовольствия и снаряжения. Карфагенянам также удалось уничтожить часть римских кораблей. В конце концов Манилий выступил против Гасдрубала, но был им разбит. От полного разгрома римлян спасла находчивость военного трибуна Сципиона Эмилиана, будущего завоевателя Карфагена. В военных действиях наступило затишье. Консулы без особого успеха пытались захватить меньшие города, сохранившие верность Карфагену. В это время умер Масинисса, а посланный к его двору Сципион примирил с Римом сыновей покойного царя.
В 148 г. до н. э. командование сухопутной римской армией принял консул Луций Кальпурний Пизон, полководец столь же неудачливый, как и его предшественник. В свое время (в 154 г. до н. э.) он был претором в Испании, где потерпел поражение от лузитанов. Сменив Манилия в Африке, он не смог справиться с такими карфагенскими городами, как Клупея или Гиппон-Диаррит. Новый командующий флотом, претор Луций Гостилий Манцин, проявил больше энергии, но и ему не удалась попытка захватить Карфаген со стороны моря врасплох. Отрезанный в предместье Мегара, он с трудом сумел пробиться. Ободренные неудачами римлян, карфагеняне стали действовать энергичнее. В самом Карфагене к власти пришли наиболее радикальные элементы. Гасдрубал оставил в лагере под Неферисом своего подчиненного Диогена и прибыл в Карфаген, где, как общепризнанный лидер демократической партии, принял власть, введя военную диктатуру. Суффет Гасдрубал, обвиненный им в намерении сдать город нумидийцам, был убит на народном собрании разъяренной толпой. Под стенами Карфагена Гасдрубал разбил второй укрепленный лагерь.
В Риме, увязшем в войнах с Македонией и Испанией, росла тревога из-за затянувшихся боевых действий в Африке. Прежние неудачи приписывали — и в значительной мере справедливо — бездарности полководцев. Избрание Сципиона Эмилиана консулом в 147 году и вручение ему верховного командования в Африке стало самым удачным решением римлян в этой войне. Прибыв в армию, Сципион восстановил в ней пошатнувшуюся дисциплину и со всеми имевшимися в его распоряжении силами двинулся на Карфаген. Гасдрубал заперся в городе. Во время первого же ночного приступа римлянам удалось форсировать одинарную стену с северо-западной стороны и ворваться в Мегару. Однако удержать захваченные позиции было невозможно, и римляне отступили, приступив к планомерной осаде, рассчитанной прежде всего на то, чтобы уморить защитников голодом.
В первую очередь Сципион решил отрезать карфагенянам всякую возможность подвоза продовольствия и связи с внешним миром. Будучи хозяином перешейка, он возвел на расстоянии трехсот метров от тройных оборонительных стен линию укреплений протяженностью около четырех с половиной километров, отрезав таким образом Карфаген от суши. Затем он соорудил перед портом огромную дамбу длиной около восьмисот пятидесяти метров и отрезал город также и от моря. Для карфагенян это был тяжелый удар, ибо в порту днем и ночью кипела работа по созданию военного флота, состоявшего из пятидесяти пентер и трирем, а также множества меньших кораблей. Возведение дамбы делало этот флот бесполезным. Однако карфагеняне совершили невероятное. Они прорыли канал, соединяющий военный порт с морем, и, к полному изумлению римлян, карфагенский флот вышел в открытое море. В длившемся четыре дня морском сражении Сципиону все же удалось уничтожить часть карфагенских кораблей. Остальные вернулись в порт. Затем Сципиону удалось овладеть полосой побережья к северо-востоку от порта, где он вырыл ров и окружил его стеной, с которой можно было обстреливать защитников города. Осенью велись переговоры, но они закончились неудачей. Гасдрубал, желая лишить всех сторонников капитуляции какой-либо надежды на великодушие римлян и внушить им волю к борьбе до конца, приказал на глазах у армии Сципиона истребить всех римских пленных. Члены Совета Тридцати, возражавшие против этого приказа, были казнены. Война велась с обеих сторон с величайшей жестокостью.
После проигранного морского сражения и блокады остатков флота в порту карфагеняне еще возлагали большие надежды на армию, стоявшую под Неферисом. Эти надежды развеялись в конце 147 года, когда Сципион ударил по карфагенскому лагерю под Неферисом. С двух сторон римские отряды ворвались в лагерь и нанесли карфагенянам поражение. Остатки их укрылись в Неферисе, который был взят после двадцатидвухдневной осады.
Весной 146 года Карфаген был уже на исходе сил. В городе царили голод и болезни. В этих условиях последовал последний штурм римлян, который велся со стороны стены, возведенной ими летом на северо-восточном побережье. Последним оплотом пунийцев стала Бирса. Там оборонялись семь дней. На седьмой день к Сципиону прибыло посольство, и победоносный