Hi, when using "-shared -Wl,-G" to create AIX shared libraries for use with runtime linking, without also using "-Wl,-brtl" collect2 still does search for lib.a before lib.so, eventually registering global constructors found in static lib.a, which are not exported by lib.so, so the subsequent link step fails resolving these symbols.
Thank you! /haubi/
2013-02-04 Michael Haubenwallner <michael.haubenwall...@salomon.at> Accept all flags that enable aix runtime linking to change the library search order. Also there is a disabling flag. * collect2.c (aixrtl_flag): Enabled by -G and -bsvr4 too. Disabled by -bnortl. No false positive on -brtllib or -bnortllib. --- gcc/collect2.c | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-) diff --git a/gcc/collect2.c b/gcc/collect2.c index 0db908f..a9fd7a7 100644 --- a/gcc/collect2.c +++ b/gcc/collect2.c @@ -1033,9 +1033,15 @@ main (int argc, char **argv) export_flag = 1; else if (arg[2] == '6' && arg[3] == '4') aix64_flag = 1; - else if (arg[2] == 'r' && arg[3] == 't' && arg[4] == 'l') - aixrtl_flag = 1; + else if (arg[2] == 'r' && arg[3] == 't' && arg[4] == 'l' && arg[5] == '\0') + aixrtl_flag = 1; /* -brtl (not -brtllib) */ + else if (arg[2] == 'n' && arg[3] == 'o' && arg[4] == 'r' && arg[5] == 't' && arg[6] == 'l' && arg[7] == '\0') + aixrtl_flag = 0; /* -bnortl (not -bnortllib) */ + else if (arg[2] == 's' && arg[3] == 'v' && arg[4] == 'r' && arg[5] == '4') + aixrtl_flag = 1; /* -bsvr4 enables -brtl */ } + if ((argv[i][0] == '-') && (argv[i][1] == 'G')) + aixrtl_flag = 1; /* -G enables -brtl */ #endif } vflag = debug; -- 1.7.3.4