Bug 1292230 - ld doesn't resolve symbols in linked to library
ld doesn't resolve symbols in linked to library
Product: Red Hat Enterprise Linux 7
Classification: Red Hat
Component: Red_Hat_Enterprise_Linux-Release_Notes-7-en-US (Show other bugs)
Unspecified Unspecified
high Severity high
: rc
: ---
Assigned To: Lenka Spackova
Vladimír Slávik
: Documentation
Depends On:
  Show dependency treegraph
Reported: 2015-12-16 14:22 EST by Dave Johansen
Modified: 2017-10-30 08:36 EDT (History)
6 users (show)

See Also:
Fixed In Version:
Doc Type: Deprecated Functionality
Doc Text:
Symbols from libraries linked as dependencies no longer resolved by *ld* Previously, the *ld* linker resolved any symbols present in any linked library, even if some libraries were linked only implicitly as dependencies of other libraries. This allowed developers to use symbols from the implicitly linked libraries in application code and omit explicitly specifying these libraries for linking. For security reasons, *ld* has been changed to not resolve references to symbols in libraries linked implicitly as dependencies. As a result, linking with *ld* fails when application code attempts to use symbols from libraries not declared for linking and linked only implicitly as dependencies. To use symbols from libraries linked as dependencies, developers must explicitly link against these libraries as well. To restore the previous behavior of *ld*, use the "-copy-dt-needed-entries" command-line option.
Story Points: ---
Clone Of:
Last Closed:
Type: Bug
Regression: ---
Mount Type: ---
Documentation: ---
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---

Attachments (Terms of Use)

  None (edit)
Description Dave Johansen 2015-12-16 14:22:44 EST
Description of problem:
In RHEL 6, ld would resolve symbols in a library that were brought in from another library, but this is not the case in RHEL 7.

Version-Release number of selected component (if applicable):

How reproducible:

Steps to Reproduce:
1. Download simple.c from https://github.com/markkilgard/glut/blob/master/progs/examples/simple.c
2. g++ simple.c -lglut -o simple

Actual results:
~> g++ simple.c -lglut -o simple
/usr/bin/ld: /tmp/ccPIpRiP.o: undefined reference to symbol 'glOrtho'
/usr/bin/ld: note: 'glOrtho' is defined in DSO /lib64/libGL.so.1 so try adding it to the linker command line
/lib64/libGL.so.1: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status

Expected results:
Program links like it did in RHEL 6.

Additional info:
This is a regression from RHEL 6. Right now, the only solution that I know of is to explicitly add the second level libraries in the top level link. This is a painful process that will require a lot of changes to a lot of build processes out there.
Comment 2 Dave Johansen 2015-12-17 00:19:44 EST
Apparently, this was an intended change:

I just looked through the release notes for RHEL 7 and didn't see anything about this, so could it please be documented, so others don't have to jump through all of the same hurdles that we do.
Comment 3 Jeff Law 2015-12-17 11:19:47 EST
Correct.  This was an intentional change.  I thought I was documented somewhere already for RHEL 7.  It might be in the developer guide.  I'm reassigning to the doc folks to confirm its location.
Comment 5 Robert Krátký 2017-06-15 12:55:47 EDT
Apologies, this totally slipped through the net. The change should've been documented in the Release Notes for the respective version of RHEL. Unfortunately, that didn't happen, and -- on top of that -- I forgot about this bug. Feel free to yell at me -- that shouldn't have happened.

I'm now reassigning this to the Release Notes component, and we'll figure out how to deal with it. That is, we'll definitely add the info to the 7.2 Release Notes document, but we might also highlight it in the current or upcoming Release Notes. I'll leave that for Lenka's consideration.
Comment 13 Lenka Spackova 2017-10-30 08:36:02 EDT
Thank you all for the input. 

The doc text has been added to Release Notes for Red Hat Enterprise Linux 7.0 through 7.4 and will be carried over in the future minor releases (which we normally do with Deprecated Functionality descriptions).

Note You need to log in before you can comment on or make changes to this bug.