Мне хорошо известно множество возможностей, которые позволяют C-коду запускать код Python и наоборот (Cython, Boost.Python, ...). Однако, если я ошибаюсь, все эти подходы просто «назовут» соответствующие скрипты python и управляют взаимодействиями между программой C и скриптом python. Поэтому требуется установка python.Скомпилировать код python и связать его с программой на C++?
В моей ситуации я бы хотел создать автономное решение, где мой код python можно каким-то образом скомпилировать и связать с моей основной программой на C++. У меня были надежды с Cython, так как это позволило мне скомпилировать мой скрипт и создать файл .so. Тем не менее, я, похоже, не смог «связать» этот файл .so с моей программой на C++. Я попытался сделать следующее:
Простой скрипт python, содержащий функцию multiply (a, b), которая возвращает a * b; Я создал файл libmultiply.so, используя cython. Короткий файл Cpp, который выводит результат умножения (5,2):
int multiply(int, int);
int main()
{
std::cout << multiply(5,2) << std::endl;
}
Я строю, выполнив: г ++ test.cpp -L/дома/Джером/-lmultiply
Что дает меня ошибка:
test.cpp:(.text+0x2b): undefined reference to `multiply(int, int)'
collect2: error: ld returned 1 exit status
Я не уверен, что я пытался имеет смысл, но мы надеемся, что это дает вам представление о том, что я хотел бы достичь.
Cython не может этого сделать. Он выводит код, который ссылается на API Python/C. Если этот API не доступен, все, что вы построите из Cython, не сработает. Это также (AFAIK) делает довольно агрессивное название. – Kevin
Вы не можете «скомпилировать» код Python; он работает с виртуальной машины. Однако вы можете «заморозить» его, с чем-то вроде «[PyInstaller] (https://pypi.python.org/pypi/PyInstaller)» (который может создавать библиотеки DLL/SO). Это то, что вы пытаетесь сделать? Или, может быть, [[пытается понять процедуру связывания для написания гибрида python/c] (http://stackoverflow.com/questions/9826311/trying-to-understand-linking-procedure-for-writing-python-c-hybrid?rq = 1) ". –
@snotwaffle Вы можете скомпилировать его. Вам просто нужно написать компилятор :-) (так как я не знаю того, который легко доступен). –