How to get RPATH with $ORIGIN to work on Code::Blocks GCC?

前端 未结 3 973
你的背包
你的背包 2020-12-25 14:24

I\'m trying to link an RPATH containing the special string $ORIGIN into an executable built using GCC with the Code::Blocks IDE. I\'ve specified

-Wl,-R$ORIGI         


        
3条回答
  •  礼貌的吻别
    2020-12-25 15:06

    Whoever decided to make the token $ORIGIN is an evil bastard who deserves a special place in programmer hell. Since '$' is a special character for bash and other scripting languages like make, it screws everything up unless carefully escaped. Even worse, depending on which build environment you're using, the specifics of how to escape properly will likely change.

    In bash, you need to stick a backslash in front of the $:

    -Wl,-R\$ORIGIN
    

    Code::Blocks apparently also treats the $ as special. Then, whatever subprocess controller Code::Blocks sends the command to treats the backslash as special. So, both the backslash and the $ need to be doubled up to get escaped properly. Therefore, in Code::Blocks linker settings, you need to specify:

    -Wl,-R\\$$ORIGIN
    

    ...which outputs:

    -Wl,-R\\$ORIGIN
    

    ...to the build log, but the shell actually gets sent:

    -Wl,-R\$ORIGIN
    

    ...which as mentioned above produces the desired result.

    What a pain.

提交回复
热议问题