2014-02-23 7 views
15

Ich habe folgende Projekte in einem Visual Studio 2012-Lösung:Warnung LNK4075, wenn ein C++/CLI-Projekt verweist auf ein statisches lib Projekt mit/ZI (Bearbeiten und Fortfahren)

  • Native (keine /clr) statisches lib Projekt , kompiliert mit /ZI für Edit And Continue.
  • C++/CLI-DLL-Projekt, das auf die obige statische Bibliothek verweist.

Die C++/CLI-Projekt baut mit der folgenden Warnung:

warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/OPT:LBR' specification 

Wenn/OPT: NOLBR den Linker-Optionen des C++/CLI-Projekt hinzugefügt wird, wird die Warnung wird:

warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/INCREMENTAL:NO' specification 

Jeder Versuch, die inkrementelle Verknüpfungseinstellung des C++/CLI-Projekts zu ändern, ändert die Warnung nicht (C++/CLI-Projekte werden niemals inkrementell verknüpft).

Ich verstehe, dass ich Edit And Continue im C++/CLI-Projekt nicht verwenden kann, weil dies nicht unterstützt wird. Tatsächlich wird durch das Ändern von/ZI nach/Zi (Deaktivieren von Edit And Continue) im statischen Lib-Projekt die Warnung beseitigt, aber das kann ich nicht tun - andere Nicht-CLR-Benutzer dieser Lib müssen Edit And Continue verwenden.

Wie kann ich diese Warnung loswerden, ohne Edit And Continue in der statischen lib zu deaktivieren (und hoffentlich ohne separate Build-Konfiguration für native und CLR-Benutzer der statischen lib)? Ich meine, gibt es eine Möglichkeit, den Linker zu bitten, die /EDITANDCONTINUE Direktive zu ignorieren, die in der referenzierten statischen Bibliothek eingebettet ist (ähnlich wie /NODEFAULTLIB/DEFAULTLIB Direktiven ignorieren kann)?

Ich habe eine minimal VS solution erstellt, die das beschriebene Problem reproduziert.

Antwort

13

wegen '/ OPT: LBR' Spezifikation

Dies ist ein Unsinn Fehlermeldung, dass Linker-Option ist nur wirksam für ARM-Binärdateien. Dies ist einfach ein Fehler, mit/OPT: NOLBR nimmt den Stich heraus und Sie erhalten die echte Warnung.

Das ist genau genug, obwohl es keine Preise gewinnt, haben Sie gefragt, Edit + Continue Unterstützung in Ihrem statischen Lib-Projekt, aber das ist nicht verfügbar für eine gemischte .NET-Assembly. Die nicht dokumentierte/IGNORE Linker-Option ist verfügbar, um Warnmeldungen zu unterdrücken, aber diese wird von Chapell als "unignorable warning" eingestuft.

Sie müssen mit dieser Warnung leben, solange Sie Ihr statisches Lib-Projekt nicht ändern möchten. Es ist völlig gutartig. Du wirst es nicht bekommen, wenn du es mit/Zi kompilierst.

+2

Ich suchte die Einstellung, wo ich '/ OPT: NOLBR' mit einem Dropdown in VisualStudio festlegen konnte. Es gibt jedoch kein UI-Element dafür. Sie müssen dies als ** Zusätzliche Option ** unter "Konfigurationseigenschaften -> Linker -> Befehlszeile" hinzufügen – eckes

1

Es gibt keinen anderen Weg, als zu

  • disable "Bearbeiten und Fortfahren" im LIB
  • eine separat Build-Konfiguration für "Bearbeiten und Fortfahren (/ ZI)" erstellen und „Programm-Datenbank (/ Zi)“

natürlich: ich bin mir nicht bewusst, dass es ein vordefiniertes Makro zwischen/ZI und/Zi zu bestimmen ... so müssen Sie Ihren eigenen Präprozessor derective definieren betwen diese Konfigurationen distungish ..

0

Ich hatte das gleiche Problem und gefunden, die einzige Lösung ist die .vcxproj und .sln-Dateien des Projekts zu löschen und das Projekt erneut zu erstellen. Aber dann in einem alten Kopie des gleichen Projekt, das ich eine bessere Lösung gefunden: änderte ich in der projectname.vcxproj die Linie Profil wahren zu Profil falsch und LNK4075 Warnungen verschwunden Datei. Es war der Visual Studio Profiler, der die Probleme verursacht hatte.