2016-06-07 14 views
0

Ich habe eine externe Bibliothek aus einem Projekt, das ich arbeitete, die gegen Boost 1.55 kompiliert wurde; Ich bin auf ein anderes Projekt gezogen, das diese Bibliothek verwenden muss, aber das aktuelle System verwendet boost 1.58.External Library Boost Version Probleme

Wenn ich verlinkt gegen die Bibliothek beschwert es sich, dass es keine Referenzen für Boost 1.55 Bibliotheken hat. Die Bibliothek, die ich gegen mir Verknüpfung wurde mit dem folgenden find_package Befehl zusammengestellt:

find_package(Boost 1.55 COMPONENTS ... REQUIRED) 

Ich weiß, dass es für CMake einen min Befehl ist, aber ich bin nicht sicher, ob dies erlaubt mir die Bibliothek zu verwenden, die gegen Auftrieb kompiliert wurde 1.55 auf einer laufenden Maschine 1.58.

Irgendwelche Ratschläge, wie man diese externe Bibliothek kompiliert, so dass es jede Version von Boost verwendet, die mit 1.55 kompatibel ist, würde sehr geschätzt werden!

find_package Befehl für das neue Programm versucht Auftrieb zu finden):

find_package(Boost 1.55 COMPONENTS system filesystem chrono regex thread date_time REQUIRED) 

Das System das neue Programm eingeschaltet ist hat 1,58 nicht 1,55 steigern so gibt es folgendes:

-- Boost version: 1.58.0 
-- Found the following Boost libraries: 
-- system 
-- filesystem 
-- chrono 
-- regex 
-- thread 
-- date_time 
-- atomic 

Die kompiliert funktioniert gut gegen 1.58 ist es nur, wenn das neue Programm gegen die Bibliothek (gegen 1.55 kompiliert), dass es beschwert sich nicht in der Lage, th zu finden e boosten 1,55 Bibliotheken (siehe unten).

Verknüpfung Ausgang: (neue Programmverknüpfung zur Bibliothek)

/usr/bin/ld: warning: libboost_system.so.1.55.0, needed by library.so, not found (try using -rpath or -rpath-link) 
/usr/bin/ld: warning: libboost_filesystem.so.1.55.0, needed by library.so, not found (try using -rpath or -rpath-link) 
/usr/bin/ld: warning: libboost_chrono.so.1.55.0, needed by library.so, not found (try using -rpath or -rpath-link) 
/usr/bin/ld: warning: libboost_regex.so.1.55.0, needed by library.so, not found (try using -rpath or -rpath-link) 
/usr/bin/ld: warning: libboost_thread.so.1.55.0, needed by library.so, not found (try using -rpath or -rpath-link) 
/usr/bin/ld: warning: libboost_date_time.so.1.55.0, needed by library.so, not found (try using -rpath or -rpath-link) 
+0

Haben Sie tatsächlich ein Problem? Ist das so, posten Sie die Details. –

+0

Ich habe die Frage aktualisiert, um sie hoffentlich klarer zu machen. – badrobit

Antwort

1
find_package(Boost 1.55 COMPONENTS ... REQUIRED) 

wird zufrieden sein, wenn seine eine beliebige Version von Boost-findet> = 1,55.

find_package(Boost 1.55 EXACT COMPONENTS ... REQUIRED) 

würde nur mit Boost 1.55 zufrieden sein.

Daher, wenn Sie einfach die Bibliothek mit den gleichen CMakeLists in Gegenwart von Boost 1.58 neu erstellen, sollte es gut sein.

Später

ich mit einem Verfahren zu kommen versuchen, dass ich einmal die Bibliothek zusammenstellen kann (sagen mit boost 1.55) in einer Art und Weise, so dass ein anderes System, wenn auf diese einen läuft neue Version von Boost sagen 1.58; wird nicht darüber beschweren, nicht die 1.55 boost Bibliothek, wenn es die 1 hat.58 Version der Boost-Bibliotheken zur Verfügung

Sie können das nicht tun:

find_package(Boost 1.55 COMPONENTS ... REQUIRED) 

ermöglicht es Ihnen, die Bibliothek bauen mit Boost 1,55 oder später aber die Bibliothek, die Sie bauen dynamisch mit der Boost-Version verknüpft sein, die tatsächlich gefunden wird, und dass dynamische Verknüpfung in die Binärdatei über Informationen für den OS-Loader gebacken wird.

Also, wenn Sie diese Bibliothek zu einem System nehmen, wo Boost 1.55 abwesend ist, erhalten Sie Verbindungsfehler, wie Sie gesehen haben, wenn Sie versuchen, die Bibliothek mit etwas anderem zu verbinden.

Leider müssen Sie diese Bibliothek in Gegenwart von Boost 1.58 erstellen, um es mit allem auf einem System zu verbinden, das boost 1.58 ist.

+0

Das ist, was ich dachte, aber ich habe die erste CMake-Direktive für die erste Bibliothek verwendet (die mit ** 1.55 ** verlinkt), aber dann auf der anderen Maschine versuche ich mich mit ** 1.58 ** zu verbinden und es beschwert sich darüber nicht die ** 1.55 ** Bibliotheken um. Benötige ich auch die ** 1.58 ** -Bibliotheken mit der ursprünglichen Bibliothek? – badrobit

+0

@badrobit Sorry, ich verstehe das nicht :( –

+0

Ich versuche, mit einer Methode zu kommen, dass ich die Bibliothek einmal kompilieren kann (sagen wir Boost 1.55), so dass auf einem anderen System, das eine neue läuft Version von Boost sagen 1,58, wird nicht beschweren über nicht die 1,55 Boost-Bibliothek, wenn es die Version 1.58 der Boost-Bibliotheken zur Verfügung hat .. – badrobit

Verwandte Themen