I имеет следующую структуру папок:Относительные пути из двоичного файла
bin/ <-binary-file is in here
include/
src/
data/
Makefile
В моем коде я использовать относительные пути к моим данным. Итак, «../data/xml/xmlFile.xml». Это хорошо, если бы я выполнения двоичный файл из бен/папки:
[email protected]:~/PATH-TO-PROJECT/bin$ ./binary-file
argv[0] = ./binary-file
dirname(argv[0]) = .
Но если бы я выполнения двоичного файла из основной папки (или любую другую папку, а не бен/папки):
[email protected]:~/PATH-TO-PROJECT$ bin/binary-file
argv[0] = bin/binary-file
dirname(argv[0]) = bin
Файлы xml не найдены, потому что «../data» теперь будет перемещаться вверх по одному каталогу из основной папки (или любой другой папки, в которой вы находитесь при выполнении программы).
Как я могу сделать так, чтобы бинарный файл мог быть выполнен из любого каталога в моей системе?
Для того, чтобы вопрос немного более ясно:
[email protected]:~/cpp-workspace/sdl-projects/sdl-space-shooter/bin$ ~/cpp-workspace/sdl-projects/sdl-space-shooter/bin/SpaceShooter
argv[0] = /home/brandonto/cpp-workspace/sdl-projects/sdl-space-shooter/bin/SpaceShooter
dirname(argv[0]) = /home/brandonto/cpp-workspace/sdl-projects/sdl-space-shooter/bin
[email protected]:~/cpp-workspace/sdl-projects/sdl-space-shooter/bin$ cd ..
[email protected]:~/cpp-workspace/sdl-projects/sdl-space-shooter$ ~/cpp-workspace/sdl-projects/sdl-space-shooter/bin/SpaceShooter
argv[0] = /home/brandonto/cpp-workspace/sdl-projects/sdl-space-shooter/bin/SpaceShooter
dirname(argv[0]) = /home/brandonto/cpp-workspace/sdl-projects/sdl-space-shooter/bin
Unable to load image ../data/graphics/background/darkPurple.png! SDL_image Error: Couldn't open ../data/graphics/background/darkPurple.png
Unable to load image ../data/graphics/sprites/meteorBrown_big1.png! SDL_image Error: Couldn't open ../data/graphics/sprites/meteorBrown_big1.png
Здесь я выполнил двоичный файл, как только внутри бен/папки, а затем один раз внутри основной папки. Бинарный файл отлично работал изнутри bin/folder, но не смог найти относительные пути к файлам .png изнутри основной папки.
Вам нужно добавить сниффера для исполняемого файла, чтобы выяснить, где он находится. Обычно это означает чтение arg [0] (первоначальный вызов) и, возможно, проверку некоторых путей поиска. – Jiminion
Вы должны иметь возможность находить папку bin, независимо от того, где вызывается исполняемый файл. – Jiminion
Вы писали 'SpaceShooter' самостоятельно? Если нет, как насчет написания сценария оболочки, который изменяется в папку «bin» и запускает «SpaceShooter»? – lurker