我有一个C++应用程序,我试图使用pybind11来支持我的应用程序中的脚本系统,这样用户就可以编写自己的脚本了。我试图使用Python,就像许多人使用Lua作为脚本语言来扩展应用程序的功能一样。
在Lua /pybind11方面,我发现了一个很大的不同:使用Lua,我可以静态地将脚本语言链接到我的可执行文件中,甚至可以打包一个共享库,但是使用Python/pybind11,我似乎依赖于最终用户是否已经在他们的系统上安装了Python。
对吗?
有什么方法可以让pybind11静态地链接Python库吗?
pybind11似乎还会搜索python可执行文件的路径,然后假设共享库位于同一个文件夹中。有什么方法可以分发共享库,然后告诉嵌入式解释器使用这些共享库吗?
我的最终目标是用户可以在他们的机器上安装我的C++应用程序,我的应用程序将有一个内置的Python解释器,它可以执行脚本,而不管它是否实际安装在机器上。理想情况下,我可以使用静态链接来实现这一点,但是动态链接和分发所需的库也是可以接受的。
发布于 2022-06-14 15:04:40
上有很多关于它的问题和答案
libpython3.8.a会产生大量的重定位错误。系统库只在静态构建整个可执行文件时才能工作,即使用g++ -static ...,如果需要动态可执行文件,则需要使用-fPIC构建自己的静态Python库。为了记录在案,这里是我用来链接到系统库的命令。g++ -static -pthread -I/usr/include/python3.8 example.cpp -lpython3.8 --ldl -lutil -lexpat -lz
。
https://stackoverflow.com/questions/72618038
复制相似问题