首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cx_freeze将我的共享对象库嵌入到二进制可执行文件中?

cx_freeze将我的共享对象库嵌入到二进制可执行文件中?
EN

Stack Overflow用户
提问于 2013-04-03 10:25:05
回答 1查看 2.2K关注 0票数 3

我可以使用cx_freeze来打包我的python工具,但是我需要的库无法加载。由于某些原因,输出的可执行文件/二进制名一直包含在路径中。

我得到以下错误:

/home/derekx/sbu/build/exe.linux-x86_64-2.7/secure_boot_utility/lib/libcrypto.so.1.0.0::OSError无法打开共享对象文件:不是目录

该库被打包为/home/derekx/sbu/build/exe.linux-x86_64-2.7/lib/libcrypto.so.1.0.0

创建的二进制文件"secure_boot_utility“也在build/exe.linux86_64-2.7目录中。

我的输入脚本和setup.py在/home/derekx/sbu中。

我使用了"python setup.py build“来打包工具/依赖项。

任何帮助都将不胜感激。我尝试了这些选项的组合,但仍然得到相同的错误。

我的setup.py是:

代码语言:javascript
复制
import sys
from cx_Freeze import setup, Executable

sys.path.append('sbu_scripts/')
sys.path.append('lib/')

binincludes = ['libcrypto.so.1.0.0']
binpaths = ['/home/derekx/sbu/lib']
includefiles = [('lib/libcrypto.so.1.0.0','lib/libcrypto.so.1.0.0'),]

exe = Executable(
    script="secure_boot_utility.py",
    )

setup(
    name = "SecureBoot",
    version = "0.1",
    description = "Test Secure Boot",
    options = {"build_exe": {'copy_dependent_files':True, 'create_shared_zip':True, 'bin_includes':binincludes, 'bin_path_includes':binpaths, 'include_files':includefiles}},
    executables = [exe]
    )
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-05 07:57:23

我不确定为什么顶层目录(getcwd)是可执行文件的名称。

无论如何,我可以用os.path.exists在我的代码中添加一些东西,并重新调整发送给LoadLibrary的值。

托马斯,谢谢你抽出时间来回复我。

这本来是别人的工具,我不得不支持它。发生的事情是,sys.path被用来获取当前工作目录,以构建正在加载的库的完整路径。我不确定为什么使用cx_freeze创建的可执行文件总是将可执行文件的名称嵌入到当前工作目录中。

我如何修复它,检查了使用os.path.exists构造的库的完整路径是否存在:

代码语言:javascript
复制
if os.path.exists(path_to_lib) is False:
    path_to_lib = LibName

return path_to_lib

这样,如果完整路径存在,它就可以工作,如果它不是只使用LibName,它就应该从LD_LIBRARY_PATH环境设置中获取它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15777837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档