Ich habe eine Rust-Programmdatei, die rein innerhalb des Rust-Ökosystems erstellt wurde; kein externer C-Code oder verknüpfte Bibliotheken, egal was der Compiler hineinzieht.
Nach dem Kompilieren mit ASAN unter Linux meldet ASAN eine OD-Verletzung (One-Definition-Regel). Sollte ich Bedenken hinsichtlich der Richtigkeit meiner ausführbaren Datei haben? Was sind einige gemeinsame Anliegen? Was sind Eckfälle?
Mein Verständnis ist, dass alle meine Rust-Abhängigkeiten in .rlib
s kompiliert wurden, und weil keiner meiner Code in einer fremden Sprache ist, und weil keiner meiner Code explizit auf fremde Bibliotheken verweist, hätte der Compiler es wissen müssen von all des Symbolnamens meines Programms zum Zeitpunkt der Kompilierung, mit der möglichen Ausnahme von Systembibliotheken, die er selbst in sich hineinzieht und die er daher kennen sollte. Daher lehne ich mich darauf hin, die ODR-Verletzung als "nichts, was ich dagegen tun kann" zu ignorieren.
Ich bin momentan nicht in der Lage, ein minimales Repro-Beispiel zu produzieren, und brauche nur eine Antwort, die mir genug gibt, um zu bestimmen, ob ich mich genug um eine Untersuchung kümmern soll oder nicht.
Der Befehl, den ich zum Erstellen / Ausführen mit ASAN verwendet habe:
%Vor%Die Fehlermeldung (mit dem Namen der ausführbaren Datei und dem Dateipfad wurde entfernt)
%Vor%Soweit ich das beurteilen kann, stammt das nicht von meinen Kisten (und ich beobachte sonst nichts schlechtes Verhalten, daher meine Neigung, mich nicht zu kümmern), aber ich habe mehrere voneinander abhängige Kisten, die hier instrumentiert werden, und bin mir nicht sicher, ob Dies könnte ein noch finstereres Problem widerspiegeln.
Tags und Links rust one-definition-rule