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): How reproducible: Easily reproducible 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 Actual results: unresolved symbol __ctype_toupper Expected results: link success Additional info: It appears that __ctype_toupper, __ctype_tolower, and __ctype_b no longer exist in libc
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.