How to identify system shared libraries?
My software tool has some external dependencies. I am distributing it as a conda package for linux64 with precompiled dependencies including shared libraries. Unfortunately I don't know how to recognize the system libraries from the software-specific ones. I think distributing libs like libc
is not necessary and even should be avoided, because different Linux distros can have specific versions of some system libs.
I am using this simple oneliner to export shared libs (source):
$ ldd file | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' /destination
For example, these are the shared libs for Tesseract software:
$ ldd tesseract.bin
linux-vdso.so.1 => (0x00007ffff4bc7000)
libtesseract.so.4 => not found
liblept.so.5 => not found
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f0ad8bf3000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f0ad89dc000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0ad8615000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0ad830a000)
/lib64/ld-linux-x86-64.so.2 (0x0000563cf6115000)
As you can see, only libtesseract.so.4
and liblept.so.5
are software-specific libs (not found because they aren't in LD_LIBRARY_PATH
).
So is there any way to recognize the system shared libraries? I can check if they are in /lib
, but is this always true? Are there only system libs so they can't be somewhere else?
dynamic-linking shared-library software-distribution
add a comment |
My software tool has some external dependencies. I am distributing it as a conda package for linux64 with precompiled dependencies including shared libraries. Unfortunately I don't know how to recognize the system libraries from the software-specific ones. I think distributing libs like libc
is not necessary and even should be avoided, because different Linux distros can have specific versions of some system libs.
I am using this simple oneliner to export shared libs (source):
$ ldd file | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' /destination
For example, these are the shared libs for Tesseract software:
$ ldd tesseract.bin
linux-vdso.so.1 => (0x00007ffff4bc7000)
libtesseract.so.4 => not found
liblept.so.5 => not found
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f0ad8bf3000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f0ad89dc000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0ad8615000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0ad830a000)
/lib64/ld-linux-x86-64.so.2 (0x0000563cf6115000)
As you can see, only libtesseract.so.4
and liblept.so.5
are software-specific libs (not found because they aren't in LD_LIBRARY_PATH
).
So is there any way to recognize the system shared libraries? I can check if they are in /lib
, but is this always true? Are there only system libs so they can't be somewhere else?
dynamic-linking shared-library software-distribution
Why don't you link this statically?
– rudimeier
May 8 '17 at 12:47
1
/lib
depends on how exotic the Linux is; NixOS for example has no/lib
(nor/lib64
) directory. You could try asking the ports or package system, I guess, to see if something belongs to a known port or package...
– thrig
May 8 '17 at 14:44
@rudimeier That's the best solution, but unfortunately it's very complicated (even impossible) in case of some libs. I have tried that.
– jirinovo
May 8 '17 at 15:15
@thrig My distro is Ubuntu which si following the File System Hierarchy Standard. But according to this/lib
contains libs needed for boot and for binaries in/bin
. So I think not all the system libs are there. On the other hand if I filter libs located there, I should filter most of the system libs and the rest can be checked manually.
– jirinovo
May 8 '17 at 15:22
add a comment |
My software tool has some external dependencies. I am distributing it as a conda package for linux64 with precompiled dependencies including shared libraries. Unfortunately I don't know how to recognize the system libraries from the software-specific ones. I think distributing libs like libc
is not necessary and even should be avoided, because different Linux distros can have specific versions of some system libs.
I am using this simple oneliner to export shared libs (source):
$ ldd file | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' /destination
For example, these are the shared libs for Tesseract software:
$ ldd tesseract.bin
linux-vdso.so.1 => (0x00007ffff4bc7000)
libtesseract.so.4 => not found
liblept.so.5 => not found
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f0ad8bf3000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f0ad89dc000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0ad8615000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0ad830a000)
/lib64/ld-linux-x86-64.so.2 (0x0000563cf6115000)
As you can see, only libtesseract.so.4
and liblept.so.5
are software-specific libs (not found because they aren't in LD_LIBRARY_PATH
).
So is there any way to recognize the system shared libraries? I can check if they are in /lib
, but is this always true? Are there only system libs so they can't be somewhere else?
dynamic-linking shared-library software-distribution
My software tool has some external dependencies. I am distributing it as a conda package for linux64 with precompiled dependencies including shared libraries. Unfortunately I don't know how to recognize the system libraries from the software-specific ones. I think distributing libs like libc
is not necessary and even should be avoided, because different Linux distros can have specific versions of some system libs.
I am using this simple oneliner to export shared libs (source):
$ ldd file | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' /destination
For example, these are the shared libs for Tesseract software:
$ ldd tesseract.bin
linux-vdso.so.1 => (0x00007ffff4bc7000)
libtesseract.so.4 => not found
liblept.so.5 => not found
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f0ad8bf3000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f0ad89dc000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0ad8615000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0ad830a000)
/lib64/ld-linux-x86-64.so.2 (0x0000563cf6115000)
As you can see, only libtesseract.so.4
and liblept.so.5
are software-specific libs (not found because they aren't in LD_LIBRARY_PATH
).
So is there any way to recognize the system shared libraries? I can check if they are in /lib
, but is this always true? Are there only system libs so they can't be somewhere else?
dynamic-linking shared-library software-distribution
dynamic-linking shared-library software-distribution
edited 2 hours ago
Rui F Ribeiro
41.5k1483140
41.5k1483140
asked May 8 '17 at 12:27
jirinovojirinovo
1383
1383
Why don't you link this statically?
– rudimeier
May 8 '17 at 12:47
1
/lib
depends on how exotic the Linux is; NixOS for example has no/lib
(nor/lib64
) directory. You could try asking the ports or package system, I guess, to see if something belongs to a known port or package...
– thrig
May 8 '17 at 14:44
@rudimeier That's the best solution, but unfortunately it's very complicated (even impossible) in case of some libs. I have tried that.
– jirinovo
May 8 '17 at 15:15
@thrig My distro is Ubuntu which si following the File System Hierarchy Standard. But according to this/lib
contains libs needed for boot and for binaries in/bin
. So I think not all the system libs are there. On the other hand if I filter libs located there, I should filter most of the system libs and the rest can be checked manually.
– jirinovo
May 8 '17 at 15:22
add a comment |
Why don't you link this statically?
– rudimeier
May 8 '17 at 12:47
1
/lib
depends on how exotic the Linux is; NixOS for example has no/lib
(nor/lib64
) directory. You could try asking the ports or package system, I guess, to see if something belongs to a known port or package...
– thrig
May 8 '17 at 14:44
@rudimeier That's the best solution, but unfortunately it's very complicated (even impossible) in case of some libs. I have tried that.
– jirinovo
May 8 '17 at 15:15
@thrig My distro is Ubuntu which si following the File System Hierarchy Standard. But according to this/lib
contains libs needed for boot and for binaries in/bin
. So I think not all the system libs are there. On the other hand if I filter libs located there, I should filter most of the system libs and the rest can be checked manually.
– jirinovo
May 8 '17 at 15:22
Why don't you link this statically?
– rudimeier
May 8 '17 at 12:47
Why don't you link this statically?
– rudimeier
May 8 '17 at 12:47
1
1
/lib
depends on how exotic the Linux is; NixOS for example has no /lib
(nor /lib64
) directory. You could try asking the ports or package system, I guess, to see if something belongs to a known port or package...– thrig
May 8 '17 at 14:44
/lib
depends on how exotic the Linux is; NixOS for example has no /lib
(nor /lib64
) directory. You could try asking the ports or package system, I guess, to see if something belongs to a known port or package...– thrig
May 8 '17 at 14:44
@rudimeier That's the best solution, but unfortunately it's very complicated (even impossible) in case of some libs. I have tried that.
– jirinovo
May 8 '17 at 15:15
@rudimeier That's the best solution, but unfortunately it's very complicated (even impossible) in case of some libs. I have tried that.
– jirinovo
May 8 '17 at 15:15
@thrig My distro is Ubuntu which si following the File System Hierarchy Standard. But according to this
/lib
contains libs needed for boot and for binaries in /bin
. So I think not all the system libs are there. On the other hand if I filter libs located there, I should filter most of the system libs and the rest can be checked manually.– jirinovo
May 8 '17 at 15:22
@thrig My distro is Ubuntu which si following the File System Hierarchy Standard. But according to this
/lib
contains libs needed for boot and for binaries in /bin
. So I think not all the system libs are there. On the other hand if I filter libs located there, I should filter most of the system libs and the rest can be checked manually.– jirinovo
May 8 '17 at 15:22
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f363699%2fhow-to-identify-system-shared-libraries%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f363699%2fhow-to-identify-system-shared-libraries%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Why don't you link this statically?
– rudimeier
May 8 '17 at 12:47
1
/lib
depends on how exotic the Linux is; NixOS for example has no/lib
(nor/lib64
) directory. You could try asking the ports or package system, I guess, to see if something belongs to a known port or package...– thrig
May 8 '17 at 14:44
@rudimeier That's the best solution, but unfortunately it's very complicated (even impossible) in case of some libs. I have tried that.
– jirinovo
May 8 '17 at 15:15
@thrig My distro is Ubuntu which si following the File System Hierarchy Standard. But according to this
/lib
contains libs needed for boot and for binaries in/bin
. So I think not all the system libs are there. On the other hand if I filter libs located there, I should filter most of the system libs and the rest can be checked manually.– jirinovo
May 8 '17 at 15:22