Я пытаюсь запустить приложение, приложение. Я делаю это, запустив. /app в каталоге приложения. Это приложение имеет зависимость, graphics/file.bmp. Все работает, когда я запускаю. /app в этом каталоге.
Если я вместо этого запускаю из родительской папки, он не может найти графику/файл.bmp при запуске. /app_directory/app
Какой самый чистый способ решить эту проблему? Я хотел бы записать cd в каталог файла независимо от того, откуда я запускаю программу. Я нахожусь в 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>
и он должен просто запустить вашу программу.
argv[0]
чтобы узнать, в каком каталоге на самом деле находится ваше приложение, и затем добавить его к пути - или, если вам не важно, где вы находитесь, когда запускаете код, используйтеchdir
.