Achieving binary compatibility for 7/8/9

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I need to produce binaries that can run on at least RedHat Linux 7.3, 8.0 
and 9. The code we are building is a mixture of C and C++. Today, our 
build environment looks like this:

* RedHat 7.3 as base
* GCC 3.2.1, installed in /usr/local
* Binutils 2.13.2.1, installed in /usr/local

Earlier, we only supported RHL 7.3 and 8. The binaries was statically 
linked, to avoid problems with missing libstdc++.so.5 etc. But, if you 
build static binaries on RHL 7.3, they won't run on RHL 9, it seems. For 
example, all calls to gethostbyname() will make the program segfault. 
We've also ran into some minor incompatibility problems (see below). 

So, my general question is: How can I generate binaries that will run on 
RHL 7.3, 8 and 9? Which build environment is most suitable. Some people 
have suggested that it's better to use the platforms own GCC, but for RHL 
7.3 this means GCC "2.96", which doesn't work for us, since a number of 
C++ features are missing. 

To me, the most obvious platform is RHL 7.3, but for the case with
gethostbyname() and static link, RHL 9 seems like a better choice: It
looks like it can generate binaries that works on all required systems.


Details / more minor incompatibilites, when building with GCC 3.2.1 on RHL 
7.3:

* Binaries require libc.so.6(GCC_3.0). This dependency is present on all 
  of 7.3/8/9, so it isn't really a problem, besides that it would be nice
  if the program could work on, for example, RHL 7.1 as well.

  I've found two ways of getting rid of the libc.so.6(GCC_3.0) dependency:

  1) Linking with libstdc++ dynamically
  2) Linking with the old GCC instead of GCC 3.2.1. 


* Problem with: "Incorrectly built binary which accesses errno, h_errno or 
  _res directly. Needs to be fixed"

  As I understand it, it's important that all applications include 
  errno.h, rather than just assume that errno is an int. But even if my 
  apps do this, sometimes I get this problem. The problem seems to be that 
  even libc itself accesses errno directly. (My notes give a link to 
  http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=80016, but it gives 
  me 500 right now.) I've managed to solve this by just moving the "-lc" 
  options on the linker commandline, but I have no idea why this actually 
  solves the problem. 


Are there any documentation on these problems? In the future, we would 
like to support all LSB compliant platforms, but since RHL 7.3 only 
supports LSB-1.2, and LSB-1.2 uses an old GCC, this seems like not an 
option today. 

Comments?

-- 
Peter Åstrand		www.thinlinc.com
Cendio Systems		www.cendio.se
Teknikringen 3		Phone: +46-13-21 46 00
583 30 Linköping




_______________________________________________
Redhat-devel-list mailing list
Redhat-devel-list@xxxxxxxxxx
https://listman.redhat.com/mailman/listinfo/redhat-devel-list

[Index of Archives]     [Kernel Newbies]     [Red Hat General]     [Fedora]     [Red Hat Install]     [Linux Kernel Development]     [Yosemite News]

  Powered by Linux