Faits : A. Par ordonnance pénale du 11 avril 2014, le Ministère public du canton de Genève a condamné X._ pour infraction à la LStup à une peine pécuniaire de 15 jours-amende, à 30 fr. le jour, avec sursis durant trois ans. Par ordonnance pénale du 4 mai 2014, cette même autorité a condamné X._ pour infraction à la LEtr et consommation de stupéfiants à une peine privative de liberté de 90 jours. Elle a révoqué le sursis précité. X._ a fait opposition à cette dernière ordonnance, en temps utile. Il a été ensuite convoqué par le ministère public à une audience fixée au 2 juin 2014, audience à laquelle il ne s'est pas présenté. Par ordonnance du 2 juin 2014, le ministère public a constaté le retrait de l'opposition, en application de l'art. 355 al. 2 CPP. B. Par arrêt du 7 juillet 2014, la Chambre pénale de recours de la Cour de justice du canton de Genève a rejeté le recours formé par X._ contre cette ordonnance. C. X._ forme un recours en matière pénale au Tribunal fédéral contre cet arrêt. Il conclut, avec suite de frais et dépens, à son annulation et au renvoi de la cause au ministère public afin qu'il statue sur l'opposition, subsidiairement à l'autorité précédente. Il sollicite l'assistance judiciaire. Le ministère public a conclu au rejet du recours. La cour cantonale a formulé des observations. Le recourant s'est déterminé.