Конечный исполняемый файл на C с требованиями к файлу ifstream

#c #makefile #executable #filestream

#c #makefile #исполняемый файл #filestream

Вопрос:

Итак, у меня есть запрос, на который я не смог найти ответ. Я использую Atom в качестве текстового редактора, и у меня есть makefile для компиляции моей программы. В моей программе я читаю из двух текстовых файлов, используя std::ifstream amp; std::sstream. Когда я компилирую свою программу с помощью makefile, а затем запускаю программу, пока мой терминал находится в этом каталоге, все работает отлично.

НО … когда я не использую терминал и перехожу к исполняемому файлу run unix через папки и запускаю программу, она не может загрузить два текстовых файла.

Мне было интересно, как программисты решают эту головоломку, чтобы создать окончательную программу? Есть ли способ статически связать файлы внутри программы, как вы можете с помощью заголовков библиотеки, чтобы у вас не было этой проблемы?

Комментарии:

1. Вы могли бы указать полный путь к файлу, который вы хотите прочитать, а не относительный?

2. Это не имеет ничего общего с программой или тем, как она построена. Вместо этого речь идет о текущем рабочем каталоге (он же CWD) при запуске программы. Если вы используете относительные пути для файлов, то они относятся к CWD, а не к тому месту, где находится исполняемая программа. Если вы запустите программу с терминала, но не из ожидаемого каталога (просто сделайте, например cd .. ), то она также не будет работать. Попробуйте вместо этого использовать абсолютные пути.

3. Хорошо, теперь это определенно работает, спасибо. Мой следующий вопрос… если бы я должен был отправить исполняемый файл другу, и если бы он его запустил … это, очевидно, не сработало бы. Как вы решаете эту проблему?

4. Если вы можете предположить, что ваши файлы всегда находятся в том же каталоге, что и ваш исполняемый файл, вы можете использовать путь к самому исполняемому файлу. Вы можете использовать /proc/self/exe , чтобы получить полный путь к вашему исполняемому файлу.

5. спасибо, я разберусь с этим 🙂