当罗马城中在准备下次战事的时候,阿普利亚的战火业已重燃。汉尼拔在时节允许他离开冬营时,立即决定了战争路线。他采取攻势,从吉伦尼阿出发,向南,经过鲁塞利亚,越过奥菲德斯,取得坎奈城砦(在坎诺撒与巴勒塔之间);这个城砦控制坎纽西阿平原,因之是罗马的主要兵库之一。罗马这方面,由于法比亚已在中秋依法辞却独裁之职,现在军队便由奈阿斯·塞维利阿斯和马卡斯·雷克拉斯率领;此二人,原为执政官,现在则成为次执政官,衷心不悦,却又无法改变事实。不论从政治或军事立场而言,现在都比任何时期更需制止汉尼拔前进,其方法即是对阵战。元老院下达了具有这种含意的命令,而两位新的总司令保拉斯与瓦罗,于是于538年夏初抵达阿普利亚。罗马军有四个新军团,再加同数的联盟军,共达步兵八万(半数为自由民,半数为盟军),骑兵六千(三分之一为自由民,三分之二为盟军);汉尼拔则骑兵一万,而步兵仅只四万。这样一场对阵战是汉尼拔再切望不过的了,不仅是由于前已述及的原因,而且特别因为宽广的阿普利亚平原可以任他尽量发挥他骑兵的优越性。再者,虽然他有优秀的骑兵,但罗马兵力两倍于他的大军扎营于附近,又有连串的堡垒做依托,使他日用品的征集倍感困难。罗马这方面,如前所说,也已决心一战;但其中较明智的一个,却看出汉尼拔的有利态势,因此认为暂时应当先按兵不发,只扎营于敌军附近,迫其后退,而在其较为不利地点二战。持此观点的便是保拉斯。因此,对着迦太基军于坎奈的军营——在奥菲德斯河右岸——他建了两个罗马军营,均在该河更为上游之地,其中较大的,也在该河右岸,较小的,则在左岸,距河一英里,距敌营亦一英里;他这样做是为了在两岸均阻止敌人的征集部队。但这种“迂腐的”军事布置是他的民主派同僚所不能赞成的——到战场上来是为挥刀的,而不是放哨的,这个话已经说得太多了——因之下令,无论何时,无论何地,见敌人就打。由:于军事会议一向就遵循一个愚蠢的惯例——两个总司令,今天你当家,明天我做霸——那么,除了让这人行道上的英雄霸道之外,又还有什么办法?能以,在罗马主营中只留了一万人,以便在两军酣战之际,夺取迦太军营塞,因之截断敌军渡河的退路。于是,照未更正的历书,在八月二日,照更正过的历书,或当在六月,罗马大军渡河——此时节,河水浅,不碍行军——在罗马较小的军营附近布阵——这罗马的小军营距敌营最近,介于罗马大军营与迦太基营之间,业已在进行散兵战——布阵之地本身,则是河左岸从坎奈向西延伸的广大平原。迦太基军也随之渡河,其左翼依于河边,而罗马军则右翼依于河边。罗马大军置于两翼者照旧为骑兵,弱部——由自由民组成,鲍拉斯率领——在右方,靠近河边;强部——由盟军组成,瓦罗率领——在左方,向平原。中央置纵深异乎寻常的步兵,由次执政官奈阿斯·塞维利阿斯指挥。正对这中央纵队,汉尼拔布置的是新月阵形的步兵,突出的圆形部分为佩戴本土甲胄的塞尔特与伊比利亚战士,而配备了罗马武装的利比亚部队则构成后收的月尖两翼。在河边,布置的全部是重骑兵,由哈斯德鲁巴指挥;平原一边,则为纽米底亚轻骑兵。在骑装部队短暂的散兵战后,立即全线交战。迦太基的轻骑兵力战瓦罗率下的重骑兵,纽米底亚人不断进攻,而无决定性战果。中央,罗马军团则将首先遭遇的西班牙部与高卢部悉数剿灭;胜利者乘势逼进,急求战果,但右翼之罗马军则已处于不利。汉尼拔仅求先缠住敌军左翼骑兵,然后率同哈斯德鲁巴全体正规骑兵横压罗马军较弱的右翼,首先击溃之。罗马骑兵在勇敢抗抵之后,终于弃手,未遭落马者,均被逐赶过河,溃散于平原;鲍拉斯负伤,奔至中央战阵,意图扭转步兵军团阵势,或与之共生死。而罗马步兵此时则由于敌军步兵的前涌,为乘胜一举而破之,乃改变其前方部署,使成攻击纵队,以锲形阵势穿入敌人中央。在这种阵势下,他们遭到从左右两方轮转而来的利比亚步兵的猛烈攻击,其中一部分被迫停止前进,以便抵抗侧翼来的攻击。于是,罗马步兵的前进遭到遏止,然其主部已太拥挤,此时已经不再有施展空间。同时,哈斯德鲁巴在彻底击败鲍拉斯翼以后,重新召集整编其骑兵,率奔敌军中央部队之后背,攻击瓦罗部。瓦罗的意大利骑兵,与纽米底亚人缠战业已穷于应付,在双重攻击之下,迅即溃散。哈斯德鲁巴,将追击逃军的任务交与纽米底亚人,第三度集合其部队,奔攻罗马步兵背后。这一击成为决定性的行动。逃无退路。如罗马人在坎奈之役如此庞大的军队之彻底毁灭,而敌人的代价又如此之少的,可能史无前例。汉尼拔损失人员不及六千,其中三分之二为塞尔特人,因为他们首先遭到罗马步兵军团的攻击;但罗马七万六千上战场的人,倒于地者七万人,其中包括执政官鲁西阿斯·鲍拉斯,次执政官奈阿斯·塞维利阿斯,军官中的三分之二,还有八十名元老级的人物。执政官瓦罗逃得一命,只是由于他眼尖马快,奔到了温纽西亚,不以众死独生为耻。罗马营中留守的一万军马大部分被俘,只有数千人——部分为留守者,部分为战阵溃退者——逃至坎纽西阿。然而,这一年,罗马还似乎厄运未满,年底派往高卢的军团也遭遇埋伏,连同其将军鲁西阿斯·鲍斯杜米阿斯——本已指派为次年的执政官——全军毁灭于高卢人之手。
这史无前例的成功似乎终于催熟了那远大的政治目标——而汉尼拔远征意大利的目的就是为此。不错,他的计划主要是以他的军队为基础;但由于他精确了解敌人的力量,因之在他的设计中,军队只是前锋,而东西两方的各国势力要逐渐联合支持它,以准备摧毁那高傲的城市。然而,本似乎最确实的支持,也就是由西班牙派遣的增援部队,却由罗马派去的将军奈阿斯‘西比奥的勇武与坚毅所挫。在汉尼拔渡过隆河以后,西比奥就航至恩波利艾,首先控制庇里牛斯山与艾布罗之间的海岸,然后,在征服汉诺之后,也控制了内陆(536年)。次年(537年),在艾布罗河口,他将迦太基舰队完全摧毁,当他的弟弟,保卫波河河谷的勇将普布利阿斯率八千人增援后,他甚至越过艾布罗,远至萨冈腾。哈斯德鲁已确定于次年(538年)在获得非洲增援后,受其兄之命,率兵企图通过庇里牛斯山;但西比奥部则布阵于艾布罗,把他完全击溃,时间几乎与汉尼拔在坎奈战胜同时。强大的塞尔特——伊比利亚部族和许多其它西班牙部族都加入西比奥一边;他们控制了海域,庇里牛斯山的信道,并由忠诚的马西利欧人之助,也控制了高卢的海岸。因此,由西班牙来增援汉尼拔比以前更渺茫了。
至于迦太基方面,对于远征意大利的将军已经尽了预料中它一切能尽的支持了。腓尼基的各中队时时威胁意大利海岸和罗马的岛屿,防范罗马登陆非洲,只此而已。更实际的援助是没有的,主要原因倒不是由于汉尼拔行踪不定,登陆港口难寻,而是由于许多年来西班牙军已经惯于自力更生,最重要的则是主和派的怨言。这种不可原谅的消极态度所产生的严重后果,是汉尼拔痛切察觉的;虽然他把带出来的钱与士兵尽量节省运用,他的府库却渐渐空竭,薪饷日渐拖欠,精兵日薄。然而现在,当坎奈之战大胜,家乡党派性的反对之言终于沉默下来。迦太基的圣院决议将相当多的金钱与人员——一部分来自非洲,一部分来自西班牙——置于将军运用之下,其中包括四千纽米底亚战马,四十头大象,并积极从事西班牙与意大利战争。
迦太基与马其顿尼亚之间筹组攻击同盟,讨论已久,其所以一再拖延,系因安提冈纳斯猝死,而其继承人菲立浦又犹豫不决,接下来,他又跟他的希腊盟邦发动了不是时候的战争,攻击艾托利亚人(534—537年)。只有到了现在,在坎奈之战以后,法罗斯的德米特里阿斯宁发现菲立浦有意听取他的建议,把他伊利里亚的土地让与马其顿——而若要让,则必须先从罗马人手中夺回——也只有到了现在,比拉的宫廷才跟迦太基结成同盟。马其顿着手派遣入侵军登陆意大利东岸,为了回报,迦太基答应将把罗马占领的艾比拉斯之地归还马其顿。