Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

boost - Welche Bibliotheken?

2 views
Skip to first unread message

Heinz-Mario Frühbeis

unread,
Nov 18, 2017, 7:25:26 AM11/18/17
to
Hallo,

wenn ich jetzt auf dem Entwicklerrechner libboost-dev installiere, dann
-dev, weil ich damit "develope", also entwickele.
Welche Bibliothek braucht es denn dann auf einem anderen Rechner, wo es
"nur" laufen soll?
Braucht es da auch die libboost-dev, oder reicht / braucht es da eine
andere?

Mit Gruß
Heinz-Mario Frühbeis

Marcel Mueller

unread,
Nov 18, 2017, 11:27:48 AM11/18/17
to
Kommt darauf an, wie Du gelinkt hast. Im Fall von statisch brauchst Du
gar nichts, bei shared Library nur die ohne -dev, allerdings in der
exakt passenden Version.


Marcel

Heinz-Mario Frühbeis

unread,
Nov 18, 2017, 3:07:40 PM11/18/17
to
Ok, danke.

Nur mal noch gefragt bezgl. der _exakten_ Version:
Wie sieht denn da die exakte Definition von 'exakt' aus?

Was ich meine ist, auf meinem Notebook habe ich ein Minimal-Arch Linux
drauf, was jetzt bestimmt schon drei Jahre drauf ist und _nie_ irgendein
Update bekam.
Auf dem Entwickler-Rechner habe ich mittlerweile Linux Mint 18.1 mit
_allen_ Updates drauf.
Ich würde jetzt nicht wetten, aber wenn, dann z. Bsp. das sich bei X
irnkwas geändert hat?

Von meinen Bibliotheken mal abgesehen, habe ich folgende Verlinkungen:
-lImlib2 -lX11 -lXext -ldl -lpthread -lrt

Und das läuft anstandslos auf meinem Linux Mint 18.1-Rechner, wie auch
auf meinem Notebook mit drei Jahren altem Minimal-Arch Linux...

Stefan Enzinger

unread,
Nov 20, 2017, 4:40:57 AM11/20/17
to
On 2017-11-18 21:07, Heinz-Mario Frühbeis wrote:

> Nur mal noch gefragt bezgl. der _exakten_ Version:
> Wie sieht denn da die exakte Definition von 'exakt' aus?

Boost entwickelt sich schnell und wird schnell inkompatibel.
Darum solltest du statisch linken.

ldd sagt dir, was dein kompiliertes Programm erwartet.

$ ldd /bin/nano
linux-vdso.so.1 => (0x00007ffdea7e0000)
libncursesw.so.5 => /lib/x86_64-linux-gnu/libncursesw.so.5
(0x00007f702525e000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f7025035000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7024c6a000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7024a66000)
/lib64/ld-linux-x86-64.so.2 (0x00005627aa0d4000)


lg

Rainer Weikusat

unread,
Nov 20, 2017, 11:24:29 AM11/20/17
to
Stefan Enzinger <min...@aon.at> writes:
> On 2017-11-18 21:07, Heinz-Mario Frühbeis wrote:
>
>> Nur mal noch gefragt bezgl. der _exakten_ Version:
>> Wie sieht denn da die exakte Definition von 'exakt' aus?
>
> Boost entwickelt sich schnell und wird schnell inkompatibel.
> Darum solltest du statisch linken.

Holy non-sequitur, Batman!

Falls zueinander inkompatible Versionen von Boost faelschlich behaupten,
dieselbe Funktionalitaet anzubieten, waere das (was uebrigens zu
demonstrieren stuende) ein Fehler in der Bibliothek.

Marcel Mueller

unread,
Nov 20, 2017, 1:41:24 PM11/20/17
to
On 20.11.17 17.24, Rainer Weikusat wrote:
>> Boost entwickelt sich schnell und wird schnell inkompatibel.
>> Darum solltest du statisch linken.
>
> Falls zueinander inkompatible Versionen von Boost faelschlich behaupten,
> dieselbe Funktionalitaet anzubieten, waere das (was uebrigens zu
> demonstrieren stuende) ein Fehler in der Bibliothek.

Ich glaube, darauf wollte er nicht hinaus.
Das Problem ist eher, bis die von einem favorisierte Boost-Version
Einzug in alle Distributionen genommen hat, können Jahre vergehen.


Marcel

Matthias Andree

unread,
Nov 20, 2017, 4:02:24 PM11/20/17
to
Verwendest Du überhaupt etwas, das gelinkt werden müsste? Viele der
Bibliotheken bestehen nur aus C++-Headern und bedürfen keines Linkens
zur Laufzeit. Ansonsten siehe weitere Antworten hier.

Stefan Enzinger

unread,
Nov 21, 2017, 3:54:28 PM11/21/17
to
Stimmt, danke.

Es bringt aber auch wenig wenn man gegen
libboost_system.so.1.54.0
linkt aber am System dann
libboost_system.so.1.58.0
installiert ist. Da kann das noch so kompatibel sein, wenn der filename
net passt.

Da gibt's auch keine Links von
libboost_system.so -> libboost_system.so.1.58.0 oder ähnliches,
zumindest unter ubuntu, siehe:
https://packages.ubuntu.com/artful/amd64/libboost-thread1.62.0/filelist

Code der mit mehreren boost versionen kompatibel sein muss ist auch
gleich voller:
#if BOOST_VERSION >= 3
...

bzw:
https://stackoverflow.com/a/10936371

lg, stefan

Thomas Jahns

unread,
Nov 22, 2017, 4:53:16 AM11/22/17
to
On 11/21/2017 09:54 PM, Stefan Enzinger wrote:
> Es bringt aber auch wenig wenn man gegen
> libboost_system.so.1.54.0
> linkt aber am System dann
> libboost_system.so.1.58.0
> installiert ist. Da kann das noch so kompatibel sein, wenn der filename net passt.

ld.so braucht zunächst mal einen passenden soname, der sollte in dem Fall
libboost_system.so.1 sein und auch so in der Library und dem Programm vermerkt sein.

> Da gibt's auch keine Links von
> libboost_system.so -> libboost_system.so.1.58.0 oder ähnliches, zumindest unter
> ubuntu, siehe:
> https://packages.ubuntu.com/artful/amd64/libboost-thread1.62.0/filelist

Der .so -Link ist immer im entsprechenden -dev Paket.

> Code der mit mehreren boost versionen kompatibel sein muss ist auch gleich voller:
> #if BOOST_VERSION >= 3
> ...
>
> bzw:
> https://stackoverflow.com/a/10936371

Code zur Kompilationszeit ist natuerlich noch ein anderes Thema.

Thomas



Heinz-Mario Frühbeis

unread,
Nov 22, 2017, 6:16:31 AM11/22/17
to
Am 18.11.2017 um 17:27 schrieb Marcel Mueller:
> On 18.11.17 13.25, Heinz-Mario Frühbeis wrote:
>> Hallo,
>>
>> wenn ich jetzt auf dem Entwicklerrechner libboost-dev installiere, dann
>> -dev, weil ich damit "develope", also entwickele.
>> Welche Bibliothek braucht es denn dann auf einem anderen Rechner, wo es
>> "nur" laufen soll?
>> Braucht es da auch die libboost-dev, oder reicht / braucht es da eine
>> andere?
>
> Kommt darauf an, wie Du gelinkt hast.

'Tschuldigung, kurze Zwischenfrage:
Wie ist das denn jetzt überhaupt mit dem Linken?
Ich ging bis jetzt eigentlich davon aus, daß _immer_ gelinkt werden muss.

Also imF für QT Creator ungefähr so was):

LIBS += -L$$HOME/EB_IDA/Libs/ -Wl,-rpath=$$HOME/EB_IDA/Libs/ -lIDA -ldl
-lpthread -lrt

INCLUDEPATH += $$HOME/EB_IDA/Includes/
DEPENDPATH += $$HOME/EB_IDA/Includes/

Aber in einer cpp-Datei habe ich

#include <boost/interprocess/managed_shared_memory.hpp>

und das funktioniert "trotzdem"<?!>.
Auch sonst habe ich in keinem Part des Projekts gegen boost gelinkt...

In einem anderen kleinen Test-Projekt habe ich

LIBS += -I/usr/include -lImlib2 -lX11 -lXext -ldl -lpthread -lrt

, aber wenn ich das (LIBS +=...) austrage, dann gibt es kein X mehr...

Wann muss denn jetzt gelinkt werden, und wann nicht?

Stefan Enzinger

unread,
Nov 22, 2017, 7:20:27 PM11/22/17
to
On 2017-11-22 10:51, Thomas Jahns wrote:
> On 11/21/2017 09:54 PM, Stefan Enzinger wrote:
>> Es bringt aber auch wenig wenn man gegen
>> libboost_system.so.1.54.0
>> linkt aber am System dann
>> libboost_system.so.1.58.0
>> installiert ist. Da kann das noch so kompatibel sein, wenn der filename net passt.
>
> ld.so braucht zunächst mal einen passenden soname, der sollte in dem Fall
> libboost_system.so.1 sein und auch so in der Library und dem Programm vermerkt se
$ readelf -d /usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0 | grep
soname
0x000000000000000e (SONAME) Library soname:
[libboost_system.so.1.58.0]

>> Da gibt's auch keine Links von
>> libboost_system.so -> libboost_system.so.1.58.0 oder ähnliches, zumindest unter
>> ubuntu, siehe:
>> https://packages.ubuntu.com/artful/amd64/libboost-thread1.62.0/filelist
>
> Der .so -Link ist immer im entsprechenden -dev Paket.

Tatsaechlich, ergibt natuerlich auch Sinn:
https://packages.ubuntu.com/artful/amd64/libboost-system1.62-dev/filelist

Thomas Jahns

unread,
Nov 23, 2017, 7:54:46 AM11/23/17
to
On 11/23/17 01:20, Stefan Enzinger wrote:
> $ readelf -d /usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0 | grep soname
>  0x000000000000000e (SONAME)             Library soname:
> [libboost_system.so.1.58.0]

wenn jede Version nur mit sich selbst kompatibel ist ist das natürlich auch eine
Ansage. Das ruft dann wohl nach -Wl,-Bstatic -lboost_system -Wl,-Bdynamic oder
libboost_system immer mitliefern.

Thomas
0 new messages