rpath=$ORIGIN not having desired effect?

后端 未结 3 578
迷失自我
迷失自我 2020-12-13 10:18

I\'ve got a binary \"CeeloPartyServer\" that needs to find libFoundation.so at runtime, on a FreeBSD machine. They\'re both in the same directory. I compile (on another pl

相关标签:
3条回答
  • 2020-12-13 10:23

    Depending on how many layers this flag passes through before the linker sees it, you may need to use $$ORIGIN or even \$$ORIGIN. You will know that you have it right when readelf shows an RPATH header that looks like $ORIGIN/../lib or similar. The extra $ and the backslash are just to prevent the $ from being processed by other tools in the chain.

    0 讨论(0)
  • 2020-12-13 10:26

    \$\ORIGIN if you are using chrpath and \$\$ORIGIN if you are providing directly in LDFLAGS

    0 讨论(0)
  • 2020-12-13 10:42

    I'm assuming you are using gcc and binutils.

    If you do

    readelf -d CeeloPartyServer | grep ORIGIN
    

    You should get back the RPATH line you found above, but you should also see some entries about flags. The following is from a library that I built.

    0x000000000000000f (RPATH)              Library rpath: [$ORIGIN/../lib]
    0x000000000000001e (FLAGS)              ORIGIN
    0x000000006ffffffb (FLAGS_1)            Flags: ORIGIN
    

    If you aren't seeing some sort of FLAGS entries, you probably haven't told the linker to mark the object as requiring origin processing. With binutils ld, you do this by passing the -z origin flag.

    I'm guessing you are using gcc to drive the link though, so in that case you will need to pass flag through the compiler by adding -Wl,-z,origin to your gcc link line.

    0 讨论(0)
提交回复
热议问题