错误的ELF类 - Python

3 投票
3 回答
2502 浏览
提问于 2025-04-16 01:55

我正在尝试安装一个用于LZJB压缩的库。可以在这里找到它:PyLZJB链接

这个库是一个C语言库的绑定,文件可以在这里找到:PyLZJB.so


不幸的是,当我把它复制到site-packages目录后,导入时出现了“错误的ELF类”错误

>>> import PyLZJB
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: ./PyLZJB.so: wrong ELF class: ELFCLASS32

如果有人能帮我就太好了。 :)

附言:我正在使用64位的Ubuntu 10.4


编辑:

如果有人能给我推荐一个替代的压缩算法,我也会很高兴。 :)

这个算法是用于HTML压缩的,并且需要支持客户端的Javascript解压缩/压缩

我真的希望有人能在这方面提供帮助。谢谢大家!

3 个回答

0

你可以选择运行一个32位的Python,或者自己编译一个PyLZJB,而不是使用现成的二进制文件。或者你也可以从其他地方获取一个64位的PyLZJB二进制文件。

7

你正在使用64位的Python解释器,但想加载一个32位的扩展,这样是行不通的。

你需要确保你的Python解释器和扩展都是同样的位数。虽然你可以找到一个32位的Python解释器,但其实获取一个64位的扩展会更好。

你应该去获取LZJB的源代码,然后自己编译,这样就能得到一个64位的共享对象。

4

如果有人能给我推荐一个替代的压缩算法,我会很高兴。

我们可以使用老牌的 deflate 算法,它是 LZ 压缩家族中更常见的一员。这里有一个JavaScript 实现。还有一个链接是关于如何用 Python 的 zlib 模块处理原始的 deflate 内容

在相对较慢的客户端代码中,压缩提交数据会增加很多额外的负担,而且提交你从中得到的原始字节也不是一件简单的事。

他们会在请求中对 GET 参数进行 Gzip 压缩吗?

GET 表单提交的查询字符串本身就应该比较短,否则会超过浏览器或服务器的 URL 长度限制。对于这么小的数据,压缩是没有意义的。如果你有很多数据,就需要用 POST 表单来提交。

即使在 POST 表单中,默认的 enctypeapplication/x-www-form-urlencoded,这意味着大部分字节会被编码成 %nn 的形式。这会让你的表单提交变得更大,可能会超过原始未压缩的大小。如果想提交原始字节,你需要使用 enctype="multipart/form-data" 的表单。

即便如此,你还是会遇到编码问题。JavaScript 字符串是 Unicode 而不是字节,它们会使用包含表单的页面的编码进行编码。通常应该是 UTF-8,但这样你就无法通过编码生成任意字节序列,因为很多字节序列在 UTF-8 中是无效的。你可以通过将每个字节作为代码单元编码为 UTF-8 来实现字节在 Unicode 中的表示,但这样会让你的压缩字节膨胀 50%(因为超过 0x80 的一半代码单元会编码成两个 UTF-8 字节)。

理论上,如果你不介意失去良好的国际化支持,可以将页面设置为 ISO-8859-1,并使用 escape/encodeURIComponent 的方式在 UTF-8 和 ISO-8859-1 之间转换输出。但这行不通,因为浏览器会撒谎,实际上使用 Windows 代码页 1252 来编码/解码标记为 ISO-8859-1 的内容。你可以使用其他编码方式将每个字节映射到一个字符,但这会增加更多手动编码的负担,并进一步限制你在页面中可以使用的字符。

你可以通过使用类似 base64 的方式来避免编码问题,但这样又会增加手动编码的性能负担,并且会膨胀 33%。

总之,所有的方法都不好;我觉得你不会从中得到太多有用的东西。

撰写回答