Description of problem:
Incompatability between software written and compiled on pre 9.0 Redhat linux
and then final linked to C library on 9.0 and vis versa. Specifically the
toupper (and likely tolower) function. If an object module using the toupper
function is created on a pre 9.0 Redhat system and the subsequent link step is
performed on a Redhat 9.0 system to produce an executable, the link will fail
with unresolved symbol "__ctype_toupper".
This "performing the final link on the target" is how the software from our
company is installed on target machines because many of our customers use many
different versions of linux and we need to link against the C library on the
target machine. Additionally, many of our customers can not change their
systems because it involves long, expensive certification processes so we must
maintain compability with older systems. Compiling on Redhat 9.0 with this
problem does not allow us to maintain backward compatability with older
systems. Likewise, compiling on our older system does not allow use of Redhat
9.0 by our customers.
Version-Release number of selected component (if applicable):
Steps to Reproduce:
1. Write C program that uses toupper and compile to .o on pre 9.0 (I'm not
sure how pre 9.0 it has to be)
2. Using 9.0, perform final link using .o produced above
3. Link fails because __ctype_toupper does not exist on 9.0
4. Compile to .o on 9.0
5. Using pre 9.0, perform final link using .o produced in step 4.
6. Link fails because __ctype_toupper_loc does not exist on pre 9.0
unresolved symbol __ctype_toupper
It appears that __ctype_toupper, __ctype_tolower, and __ctype_b no longer exist
This is misunderstanding what compatibility is and is not being provided.
Compatibility through symbol versioning is maintained for compiled programs
and shared libraries, compiling on one system and linking the resulting
object files / .a libraries on another system version is not supported.