【发布时间】:2014-03-01 16:40:21
【问题描述】:
假设我通过创建 libA.so 将 C++ 函数扩展到 python,但 libA.so 依赖 还依赖于另一个共享库 libB.so。我想以已经包含(嵌入)libB.so 的方式将 libA.so 分发给最终用户,即最终用户确实不需要获取 libB.so 或将他/她的 LD_LIBRARY_PATH 设置为指向包含 libB.so 的文件夹(如果此库存在于最终用户的文件系统中)。
所以基本上我想创建一个共享库 libA.so,它不引用任何其他(静态或共享)库。
问题1:有没有办法在linux中做到这一点?
问题2:这可以通过配置基于distutils.core的python设置脚本来完成吗? (可能问题 1 也会提供答案)
谢谢
【问题讨论】:
-
您不能将
.so文件嵌入到另一个.so文件中。如果它是一个.a文件或一堆.o文件,则可以使用ar轻松完成,然后静态链接到。might可以将两个.so文件嵌入到您的应用程序中并在运行时提取它,然后使用dlopen和dlsym加载它。 -
将
libB.a附加到要编译的文件列表中。 -
有没有办法将 libB.so 转换为 libB.a 以便可以使用 ar(顺便问一下,这是一个链接器选项吗?)?
标签: python c++ linker shared-libraries embedded-resource