2012-11-20 10 views
10

Ich habe heute von Ubuntu 12.04 aktualisiert, von dem ich denke, dass es g ++ - 4.6 zu Ubuntu 12.10 mit g ++ - 4.7.2 hatte. In meinem Code hatte ich einige Funktionen als __attribute__((always_inline)) markiert. Der Grund dafür war einfach, dass das Profiling mir gezeigt hat, dass es die Leistung des Codes signifikant erhöht hat. Es funktionierte gut mit g ++ 4.6 aber jetzt mit g ++ 4.7 erhalte ich die Fehlermeldung:Inlining fehlgeschlagen: Funktionskörper kann zum Zeitpunkt der Verbindung überschrieben werden

error: inlining failed in call to always_inline 'void func_name(args)': function body can be overwritten at link time

Ich kann meinen eigentlichen Code nicht teilen, ich habe versucht, es zu verengen, aber wenn ich zu viel ändere der Fehler geht weg, das ist also nicht hilfreich. Ich bin an der Ursache dieser Fehlermeldung interessiert.

Antwort

14

Es war nicht meine Absicht, dies selbst zu beantworten, aber ich fand die Antwort einige Minuten nach meiner Veröffentlichung zufällig. Der Grund für diese (kryptische) Fehlermeldung war, dass die Funktion nicht als inline, nur __attribute((always_inline)) markiert war.

Verwandte Themen