Тот, кто решил сделать токен $ ORIGIN, - злой ублюдок, который заслуживает особого места в аду программиста. Так как '$' является специальным символом для bash и других языков сценариев, таких как make, он все испортил, если его не экранировать. Хуже того, в зависимости от того, какую среду сборки вы используете, особенности правильного выхода из нее, скорее всего, изменятся.
В bash вам нужно поставить обратную косую черту перед $:
-Wl,-R\$ORIGIN
Code :: Blocks, по-видимому, также рассматривает $ как особый. Затем любой контроллер подпроцесса Code :: Blocks отправляет команду для обработки обратной косой черты как особой. Таким образом, и обратная косая черта, и $ должны быть удвоены для правильного экранирования. Поэтому в настройках компоновщика Code :: Blocks необходимо указать:
-Wl,-R\\$$ORIGIN
... который выводит:
-Wl,-R\\$ORIGIN
... в журнал сборки, но оболочка фактически отправляется:
-Wl,-R\$ORIGIN
... который, как упоминалось выше, дает желаемый результат.
Какая боль.