RUNPATH problem - studio path auto included :(

Does anybody know, how I can prevent CC from including its own LD_LIB pathes into LD_RUN_PATH ?

E.g.

I've set my LD_RUN_PATH to '$ORIGIN:$ORIGIN/../lib'$ARCH_DIR where ARCH_DIR is usually sparcv9 or empty (to avoid the need of hacking makefiles ...)

Than make does something like:

CC -G -hlibdb_cxx-4.3.so -o .libs/libdb_cxx-4.3.so.libs/cxx_db.o ... -lCstd -lCrun -lc-xarch=v9a

Unfortunately elfdump -d /usr/apps/lnf/packages/sparc/LNFdb4/reloc/lib/sparcv9/libdb_cxx-4.3.so shows:

[code]Dynamic Section: .dynamic

index tagvalue

[0] NEEDED0xa2cdlibCstd.so.1

[1] NEEDED0xa2eelibCrun.so.1

[2] NEEDED0xa2fblibc.so.1

[3] INIT 0x1122c0

[4] FINI 0x1123c8

[5] SONAME0xa315libdb_cxx-4.3.so

[6] RUNPATH 0xa326$ORIGIN:$ORIGIN/../lib/sparcv9:/usr/apps/studio11/SUNWspro/lib/rw7/v9:/usr/apps /studio11/SUNWspro/lib/v9a:/usr/apps/studio11/SUNWspro/lib/v9:/opt/SUNWspro/lib/ v9a:/opt/SUNWspro/lib/v9:/usr/ccs/lib/sparcv9:/lib/sparcv9:/usr/lib/sparcv9

[7] RPATH0xa326$ORIGIN:$ORIGIN/../lib/sparcv9:/usr/apps/studio11/SUNWspro/lib/rw7/v9:/usr/apps /studio11/SUNWspro/lib/v9a:/usr/apps/studio11/SUNWspro/lib/v9:/opt/SUNWspro/lib/ v9a:/opt/SUNWspro/lib/v9:/usr/ccs/lib/sparcv9:/lib/sparcv9:/usr/lib/sparcv9

[8] HASH 0xe8

[9] STRTAB0xfa10

[10] STRSZ0xa411

[11] SYMTAB0x3f38

[12] SYMENT0x18

[13] CHECKSUM 0xcd00

[14] VERNEED 0x19e28

[15] VERNEEDNUM0x3

[16] TEXTREL 0

[17] PLTRELSZ 0x6108

[18] PLTREL0x7

[19] JMPREL0x20160

[20] RELA 0x19ea8

[21] RELASZ0xc3c0

[22] RELAENT 0x18

[23] REGISTER 0x5f

[24] REGISTER 0x6e

[25] FEATURE_10x1[ PARINIT ]

[26] FLAGS0x5[ ORIGIN TEXTREL ]

[27] FLAGS_1 0x18080[ ORIGIN DISPRELPND DISPRELDONE ]

[28] PLTGOT0x226c00

[/code]

So the question is: How can I remove the SUNWSPro pathes from the RPATH ?

[1948 byte] By [elkner] at [2007-11-26 10:29:58]
# 1

CC appends your RUNPATH with paths to C++ libraries - libCstd.so and libCrun.so so that linker can satisfy your library's dependencies once it is loaded. There shouldn't be any problem with it because your RUNPATH goes first.

Back to your question, I guess specifying -norunpath (see CC(1)) should solve your problem.

MaximKartashev at 2007-7-7 2:36:10 > top of Java-index,Development Tools,Solaris and Linux Development Tools...
# 2
What problem you are trying to solve? If you just want to create a C++ program for distribution, I can provide some fairly simple guidelines.
clamage45 at 2007-7-7 2:36:10 > top of Java-index,Development Tools,Solaris and Linux Development Tools...
# 3
What I actually wanna have is a RUNPATH of "$ORIGIN:$ORIGIN/../lib/". So -norunpath or -i doesn't work :(((
elkner at 2007-7-7 2:36:10 > top of Java-index,Development Tools,Solaris and Linux Development Tools...
# 4

It's really strange, -norunpath works for me:

$ CC -G -norunpath -R '$ORIGIN:$ORIGIN/../lib/' a.cc -o liba.so

$ elfdump -d liba.so

Dynamic Section: .dynamic

index tagvalue

[0] INIT 0x684

[1] FINI 0x744

[2] RUNPATH 0x16f $ORIGIN:$ORIGIN/../lib/

[3] RPATH0x16f $ORIGIN:$ORIGIN/../lib/

...

No extra directories in RUNPATH/RPATH... Without -norunpath I have

[2] RUNPATH 0x16f $ORIGIN:$ORIGIN/../lib/:/opt/SUNWspro/lib/rw7:/opt/SUNWspro/lib:/usr/ccs/lib:/l ib:/usr/lib

[3] RPATH0x16f $ORIGIN:$ORIGIN/../lib/:/opt/SUNWspro/lib/rw7:/opt/SUNWspro/lib:/usr/ccs/lib:/l ib:/usr/lib

BTW, what compiler version do you have? I don't know when -norunpath was introduced, but it definitely works with

$ CC -V

CC: Sun C++ 5.8 2005/10/13

MaximKartashev at 2007-7-7 2:36:10 > top of Java-index,Development Tools,Solaris and Linux Development Tools...