сделать общую библиотеку из автономной программы - что делать с "int main ()"? - PullRequest
2 голосов
/ 12 декабря 2011

В моей программе мне нужно вызвать подпроцесс * sub_prog *.Я делаю это с помощью системного вызова, например system("sub_prog arg1 arg2...");.Достаточно просто;все работает правильно.

К сожалению, используемый мной суперкомпьютер не поддерживает порождение подпроцесса (из-за архитектуры нельзя использовать fork (), popen () и т. д. с MPI. Это просто факт.).Поэтому решение было бы сделать * sub_prog * (разделяемой) библиотекой и вызывать ее как библиотечную функцию, а не как подпроцесс.

Я создал общую библиотеку * libsub_prog.so * отлично.Проблема в том, что я хочу вызвать функцию * sub_prog *, т.е. я хочу вызвать main(argc,argv) из sub_prog.

Вопросы, касающиеся общих библиотек, обычно сосредоточены вокруг вызова функций-членов из общих библиотек.Но что, если я захочу вызвать саму функцию main ?

(я думал о переименовании * sub_prog * s int main в другое имя, по сути превращая его main в просто другоефункция-член. Но есть несколько глобальных переменных, определенных прямо перед int main).Должен ли я поместить их в заголовок globals.h, войти и вручную вставить «#include globals.h» в каждый исходный файл?)

Спасибо всем заранее.

1 Ответ

1 голос
/ 12 декабря 2011

Я бы просто превратил ее в обычную функцию, присвоив ей другое имя, и вызвал бы ее из основного исполняемого файла, используя это новое имя.Если вы объявите, что функция имеет связь extern "C", ее легко найти во время выполнения, используя dlsym.Что касается глобальных переменных, вам не нужно ничего делать.

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