Вызов int main () из python - PullRequest
       5

Вызов int main () из python

0 голосов
/ 08 марта 2012

У меня есть рабочая оболочка Python для кода C ++ (как предлагается здесь Вызов C / C ++ из python? ) с использованием ctypes.Но проблема в основной функции кода.Когда я делаю что-то вроде

         extern "C" {
             void call_main(){ main();}
         }

в своем коде c ++ и затем вызываю эту функцию через оболочку python

            ...
            lib = cdll.lib('./mylib.so')
            def run():
                lib.call_main()

-> я получаю «ошибку сегментации».

Самое смешное, что когда я копирую, вставляю код моего основного метода в функцию, называемую, например, test (то есть это int test () {.... # вставленный код ...} в коде c ++), externон и затем вызывает lib.test ()

=> И все работает нормально ... Так что, должно быть, проблема в том, что функция main называется main или что-то в этом роде

1 Ответ

2 голосов
/ 08 марта 2012

В C ++ вызов main() рекурсивно не разрешен (см. 3.6.1, basic.start.main, параграф 3). Кроме того, вам нужна точка входа с поддержкой C ++, когда вы хотите вызвать функциональность C ++. Иногда вы можете обойтись без вызова функциональности C ++ без этого, но то, что будет работать, а что нет, не совсем понятно. Очевидная проблема заключается в том, что глобальные объекты нуждаются в инициализации.

Просто поместите код, который вы хотите вызвать, в другую функцию и вызовите ее.

...