SO-problem?

Moderator: Telldus

Post Reply
jeinor
Posts: 38
Joined: Fri Mar 17, 2023 9:45 am

SO-problem?

Post by jeinor »

Tjena!

apt-get:ade ert telldus-core API igår, och upptäckte att det i /usr/lib bara installeras en libtelldus-core.so.2 som är en symbolisk länk till libtelldus-core.so.2.1.0. Det saknas libtelldus-core.so (som också brukar vara en symbolisk länk till libtelldus-core.so.2.1.0).

Effekten av att denna saknas blir att byggverktyg (som exempelvis CMake, som jag använder), inte hittar biblioteket när jag gör

Code: Select all

find_library(TELLDUS telldus-core)
Lägger jag till en symbolisk länk libtelldus-core.so i /usr/lib hittar byggverktyget biblioteket rätt. Som en workaround använder jag nu

Code: Select all

target_link_libraries(program /usr/lib/libtelldus-core.so.2.1.0)
istället för

Code: Select all

target_link_libraries(program ${TELLDUS})
Har jag missat något? Visst är det väl standard att det skapas en .so, en .so.2 och en .so.2.1.0? Isåfall, kan ni lägga till det i er .deb så att det blir så? Skicka gärna in include-filen i /usr/include också så slipper man ladda ner den separat? Eller är jag helt ute och cyklar, och ni kan berätta för mig hur det ska gå till?

Tack på förhand! / Jonas

EDIT: Skickade även ett mail till er info-adress innan jag kom på att det nog är smidigare att fråga på forumet.
micke.prag
Site Admin
Posts: 2243
Joined: Fri Mar 17, 2023 9:45 am
Location: Lund
Contact:

Re: SO-problem?

Post by micke.prag »

jeinor wrote:Visst är det väl standard att det skapas en .so, en .so.2 och en .so.2.1.0?
Standard är väl att, i debian, ha utvecklingsrelaterade filer i ett eget paket?
Installera paketet telldus-core-dev så kommer de filer som behövs när man vill bygga mot telldus-core att installeras. Inklusive länkar och headerfiler.
Micke Prag
Software
Telldus Technologies
jeinor
Posts: 38
Joined: Fri Mar 17, 2023 9:45 am

Re: SO-problem?

Post by jeinor »

Hmm, vad menar du med "utvecklingsrelaterade"? .so är ju ett lib, det används väl inte bara vid utveckling? Applikationer länkar in dem dynamiskt när de exekveras.

Om man gör en ls i /usr/lib så ser man att varje lib har tre filer (med olika versionnummer förstås):

Code: Select all

lib<namn>.so
lib<namn>.so.1
lib<namn>.so.1.0.0
I telldus-core-fallet finns bara de två sista:

Code: Select all

libtelldus-core.so.2
libtelldus-core.so.2.1.0
Det gör att CMake inte hittar biblioteket. Eller har jag fattat det hela fel?
micke.prag
Site Admin
Posts: 2243
Joined: Fri Mar 17, 2023 9:45 am
Location: Lund
Contact:

Re: SO-problem?

Post by micke.prag »

jeinor wrote:.so är ju ett lib, det används väl inte bara vid utveckling?
Nej, telldus-core.so är endast en symlänk och används endast vid utveckling.
jeinor wrote:Applikationer länkar in dem dynamiskt när de exekveras.
Applikationer laddar in telldus-core.so.2 när de exekveras, inte telldus-core.so.
jeinor wrote:Det gör att CMake inte hittar biblioteket. Eller har jag fattat det hela fel?
Så länge du har vårt utvecklingpaket installerat ska cmake hitta biblioteket. För att utveckla mot telldus-core behövs vårt utvecklingsbibliotek installeras. Precis som du behöver installera respektive utvecklingsbibliotek för varje annat bibliotek du vill bygga mot.

Låt mig förklara.

telldus-core.so behövs endast vid länkningen. Eftersom vårt soname är telldus-core.so.2 är det endast den symlänken som behövs när biblioteket används.

Utvecklingsfiler är sådana filer som behövs för kompilering/länkning.

Vi försöker följa "Debian Policy Manual", läs t.ex. under 8.4 "Development files". Det är väl förklarat där.
The development package should contain a symlink for the associated shared library without a version number. For example, the libgdbm-dev package should include a symlink from /usr/lib/libgdbm.so to libgdbm.so.3.0.0. This symlink is needed by the linker (ld) when compiling packages, as it will only look for libgdbm.so when compiling dynamically.
Vill du länka mot telldus-core behöver du installera vårt -dev paket.
Micke Prag
Software
Telldus Technologies
jeinor
Posts: 38
Joined: Fri Mar 17, 2023 9:45 am

Re: SO-problem?

Post by jeinor »

Aha, då förstår jag! Tack för förklaringen!

Jag ska installera telldus-core-dev. Får läsa på lite mer om det här märker jag. Är fortfarande lite oklart hur en applikation som jag utvecklat och sedan kör på en målmaskin kan veta vilken version av libtelldus-core den ska ladda (det finns ju både libtelldus-core.so.2 och libtelldus-core.so.2.1.0, och jag gissar att det kan finnas fler än så). Jag trodde att den alltid gick mot .so:n utan versionsnummer.
micke.prag
Site Admin
Posts: 2243
Joined: Fri Mar 17, 2023 9:45 am
Location: Lund
Contact:

Re: SO-problem?

Post by micke.prag »

Vid länkningen tas vårt soname med i din binär. Eftersom vårt soname är telldus-core.so.2 är det vad din binär kommer leta efter.
Micke Prag
Software
Telldus Technologies
jeinor
Posts: 38
Joined: Fri Mar 17, 2023 9:45 am

Re: SO-problem?

Post by jeinor »

Mycket logiskt. Det ser man även om man kör

Code: Select all

objdump <.so> -p | grep SONAME
Tack för all info!
Post Reply