2010-12-01 2 views
9

Ich verwende eine geschlossene Quellbibliothek (von Activ Financial), die mit ihrer API eine Boost-Verteilung enthält, sowohl einige Boost-Header-Dateien und Boost-Bibliotheksdateien.Closed-Source-Bibliothek enthält Boost-Verteilung

Ich verwende Boost auch in meiner vorhandenen Codebasis, und ich muss Activ von meinem vorhandenen Code verwenden.

Einige Punkte

  • ich meine Verwendung von Activ einkapseln kann, so dass die gesamten Teilmengen Activ zu einer einzigen Klasse schrieb ich, dass das nicht aussetzen nicht Header jeden Activ
  • Diese einzelne Header-Datei verwendet nicht jede kurbelt etwas
  • Auf diese Weise kann ich sicherstellen, dass die Activ Teile meines Code Verwendung Activ der Boost-HPP-Dateien, und mein Code meiner Erhöhung der verwendeten HPP-Dateien

Meine Sorge kommt in der Verknüpfung. Wie kann ich sicherstellen, dass mein Activ-abhängiger Code mit Activs Boost verknüpft ist und mein anderer Code mit meinem Boost verknüpft ist?

Ich benutze jetzt g ++, werde dies auch in VS2008 tun. Ich habe es in VS2008 vorher funktioniert, aber ich habe keine Ahnung, wie alles zusammenhängt. Ich möchte versuchen, dass es richtig gemacht wird.

Gibt es eine Möglichkeit, dies zu tun, ohne den Activ-Teil in einer dynamischen Bibliothek weiter einzubetten?

Edit:

Zum einen mein Endprodukt ist immer eine ausführbare Datei. Für zwei verbinde ich mich statisch, um mich zu steigern. Die Activ-Bibliothek enthält sowohl statische als auch dynamische Versionen von Boost-Objektbibliotheken, und ich plane, sie statisch zu verknüpfen.

Ich übergebe nie Boost-Objekte zwischen Code, der verschiedene Boost-Versionen verwendet.

Die Frage ist, wie verknüpfe ich eine cpp oder .o-Datei Objekte in ein Bibliotheksdatei, und dann sicher andere .o Dateien auf die identischen Objekte in anderen Bibliotheksdatei verknüpfen machen? Ist das möglich?

Antwort

3

Verbindet die Bibliothek dynamisch oder statisch mit Boost? Ist die Bibliothek, wenn sie statisch verknüpft ist, die Symbole in der DLL verfügbar (declspec export)?

Wenn die Bibliothek statisch verknüpft ist und die Symbole nicht ausgesetzt sind, und Sie sich nicht über alle Boost-Datenstrukturen (smart_ptr, Gewinde, etc.) hin und her, die Sie wahrscheinlich sicher sind Ihre eigene Version der verwenden Boost-Bibliothek in Ihrer DLL.

+0

Siehe meine Bearbeitung. Grundsätzlich scheint es, dass ich einen Hack brauche, wenn ich verlinke. Ich habe zwei Objektbibliotheken (jede Boost-Version), die identische Symbole, aber keinen identischen Code für diese Symbole haben, und ich muss sicherstellen, dass jede meiner .o-Dateien mit den richtigen Boost-A-Dateien verknüpft ist. Soweit ich weiß, kann die Verlinkung nur am Ende durchgeführt werden, also bin ich mir nicht sicher, was ich tun soll. (Für die Include-Dateien ist das Problem einfacher, da ich einfach jede cpp-Datei mit einer anderen '-I'-Direktive in gcc kompilieren kann.) Denke ich darüber richtig? – Scott