Bug #19615
closedruby psych.so always dynamic links libyaml.so, breaking build when libyaml.so is not in host lib paths
Description
Hello,
Before 3.2, libyaml was build statically into psych.so while now it will try to link the one provided during build. When you specify a different path for libraries during build, psych config does work as it tests creating conftest executables, with the linker pointing to the library at the specified path. However, when it links psych.so, it does not mentions the specified path, leaving the library resolution to the runtime linker. If the host system does not have a compatible libyaml.so.x, the build will fail when it tries to load psych.so.
I don't know what would be the cleanest solution but it would be nice if we could configure ruby to statically link libyaml into psych.so (and maybe any other ext dependencies).
As a workaround, you can add the different path to LD_LIBRARY_PATH during build and ruby calls or build with --with-static-linked-ext.
Updated by nobu (Nobuyoshi Nakada) over 1 year ago
- Status changed from Open to Feedback
I can't get well what you are trying exactly.
In the first paragraph:
When you specify a different path for libraries during build, psych config does work as it tests creating conftest executables, with the linker pointing to the library at the specified path.
If the host system does not have a compatible libyaml.so.x, the build will fail when it tries to load psych.so.
What the word "build" refers in these sentences feel different to me, no?
And how "you specify a different path for libraries during build"?
I think if libyaml what you want to use at runtime is located in a non-standard path,
- the host should be configured to use that path in /etc/ld.so.conf,
- pkg-config file for that libyaml should return appropriate
-rpath
option for--libs
, or -
LD_LIBRARY_PATH
will be needed as you mentioned.