Выполнить программу на C из другой программы в gcc - PullRequest
1 голос
/ 10 ноября 2010

Мне нужно включить в проект файл .h, который будет предоставлен во время выполнения. Так как .h файлы связаны во время компоновки, я не могу включить .h файл. Поэтому я решил написать фиктивную программу, которая создаст файл .h, а затем я бы назвал свою настоящую программу. Есть какой-либо способ сделать это. Или любое другое решение возможно. В основном мне нужно создать файл .h, прежде чем моя программа начнет выполнение, и мне нужно связать его с моей программой. Я на самом деле должен взять файл, созданный пользователем, проанализировать файл, а затем создать структуру с полями, присутствующими в этом файле. Например, если файл содержит следующие данные: - FNo: INT: 4, имя_файл: символ: 30, Ftype: INT: 4 тогда я должен создать структуру, как struct somename { int fno; char fname[30]; int ftype }; Тогда я должен иметь возможность создавать экземпляры созданной структуры. Это то, что я люблю делать

Ответы [ 3 ]

3 голосов
/ 10 ноября 2010

dlopen является решением. Позволяет загружать динамическую библиотеку во время выполнения.

  • Скомпилируйте вашу фиктивную программу как динамическую библиотеку.
  • Используйте dlopen на вашем .so
  • Вызовите любую нужную вам функцию, как если бы она была связана с gcc (см. Dlsym).
2 голосов
/ 10 ноября 2010

Что вы можете сделать:

  • создать .h файл
  • fork
    • если у ребенка: execve
    • если у отца:подождите (или нет, зависит от того, что вы хотите сделать)
0 голосов
/ 10 ноября 2010

Я бы использовал Makefile; Ваша программа получит заголовочный файл во время выполнения (возможно, проверит его?), а затем execve() команда make, передающая имя файла.

Однако, это звучит очень громоздко; возможно, вы пытаетесь достичь чего-то с неправильным инструментом. Может быть, вы хотите использовать некоторые сценарии в первую очередь? Или написать две отдельные программы ..? Что ты пытаешься сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...