macos — заставляет приложение c ++ использовать директорию файла, а не pwd

Я пытаюсь запустить приложение, приложение. Я делаю это, запустив ./app в каталоге приложения. Это приложение имеет зависимость, graphics / file.bmp. Все работает, когда я запускаю ./app в этом каталоге.

Если я вместо этого запускаю из родительской папки, он не может найти graphics / file.bmp при запуске ./app_directory/app

Какой самый чистый способ решить эту проблему? Я хотел бы перейти в каталог файла независимо от того, откуда я запускаю программу. Я нахожусь на OSX и был бы рад решению, которое работает на всех машинах Unix.

0

Решение

Вы можете сделать это в первой строке main():

chdir(dirname(argv[0]));

dirname() удаляет последний компонент пути из ввода ("a/b/c" превращается в "a/b") и если есть только один компонент пути, то он возвращает ".", Передача этого возвращаемого значения непосредственно в chdir() изменит рабочий каталог на каталог, содержащий бинарный файл.

0

Другие решения

Вы можете попробовать написать скрипт bash, который вы можете запустить из любого каталога, и он перейдет в каталог, в котором успешно выполняется программа, но это не изменит рабочий каталог, в котором находится ваш терминал. Если вы не знаете, как это сделать: создайте файл с именем build (или как хотите) и поместите его в родительскую папку. В этот файл поместите следующий код:

cd app_directory
./app

После создания скрипта запустите chmod u+x <script-name>, что сделает его исполняемым. Как только это будет сделано, вы можете просто запустить ./<script-name> и он должен нормально запускать вашу программу.

0

По вопросам рекламы [email protected]