Путь относительно текущего рабочего каталога, а не каталога, в котором находится ваше приложение.
Простым решением было бы иметь скрипт SH, который изменяет рабочий каталог на каталог вашего приложения, а затем выполняет ваше приложение, например так:
$!/bin/sh
cd `dirname $0` # changes the working dir to the script's dir
./application-name # executes your application
# no need changing back to your previous working directory
# the chdir persists only until the end of the script
Нередко приложения имеют сценарии инициализации.
Вы также можете сделать это внутри вашего основного приложения C / C ++. Поскольку путь к исполняемому файлу передается в argv [0] основного метода, вы можете сделать то же самое.
Но я бы не советовал, потому что когда вы перераспределяете свое приложение в Linux, файлы данных обычно помещаются в другой каталог (обычно / var / lib), чем ваши исполняемые файлы (обычно /usr/bin).
Так что это либо сценарий инициализации, либо передача пути к вашему каталогу данных в переменной окружения, выполняя его так ...
MY_APP_DATA_PATH=/var/lib/my-app /path/to/executable