Я пытаюсь запустить приложение, приложение. Я делаю это, запустив ./app в каталоге приложения. Это приложение имеет зависимость, graphics / file.bmp. Все работает, когда я запускаю ./app в этом каталоге.
Если я вместо этого запускаю из родительской папки, он не может найти graphics / file.bmp при запуске ./app_directory/app
Какой самый чистый способ решить эту проблему? Я хотел бы перейти в каталог файла независимо от того, откуда я запускаю программу. Я нахожусь на OSX и был бы рад решению, которое работает на всех машинах Unix.
Вы можете сделать это в первой строке main()
:
chdir(dirname(argv[0]));
dirname()
удаляет последний компонент пути из ввода ("a/b/c"
превращается в "a/b"
) и если есть только один компонент пути, то он возвращает "."
, Передача этого возвращаемого значения непосредственно в chdir()
изменит рабочий каталог на каталог, содержащий бинарный файл.
Вы можете попробовать написать скрипт bash, который вы можете запустить из любого каталога, и он перейдет в каталог, в котором успешно выполняется программа, но это не изменит рабочий каталог, в котором находится ваш терминал. Если вы не знаете, как это сделать: создайте файл с именем build (или как хотите) и поместите его в родительскую папку. В этот файл поместите следующий код:
cd app_directory
./app
После создания скрипта запустите chmod u+x <script-name>
, что сделает его исполняемым. Как только это будет сделано, вы можете просто запустить ./<script-name>
и он должен нормально запускать вашу программу.