ChinesePython Wiki   Python FAQ3 用户设定
 
站内导航 Diffs Info Edit RAW Print
 ChinesePython Wiki   中蟒大杂院   最近修改   标题目录   看发表区   搜寻/发表   站内导航   求助 

  1. 3. 编译时的问题以及其它各项已知的错误
    1. 3.1. 有没有一套测试程序可以知道我的案装是否完满 ?
    2. 3.2. 运行测试程序时, 它回报说遇到浮点运算的错误, 但我真的用 Python 写程做浮点运算时并不曾发现错误, 为什 ?
    3. 3.3. 执行好 configure 之后在 Link 步骤发生错误.
    4. 3.4. Python 不接受传给程序的参数
    5. 3.5. 在 SGI 上编译时, make 要用 python 来打造 glmodule.c, 但那个时候 python 根本还没有编译好呀!
    6. 3.6. 我用了 VPATH 来编译但结果还是输出到了源码的目录中
    7. 3.7. 编译和使用 GNU readline 库时遇到问题
    8. 3.8. socket I/O 在旧的 Linux 1.x 版本上有问题
    9. 3.9. Ultrix 的 prototypes 问题
    10. 3.11. 怎样在 Linux 下使用动态加载
    11. 3.12. 为什么在 Linux2.0 (Slackware96) 上不支持编译动态模块
    12. 3.13. Linux 下动态模块编译不了
    13. 3.14. 已删除
    14. 3.15. 在连结带有 C++ 程序代码的动态库时报错
    15. 3.16. 已删除
    16. 3.17. 已删除

3. 编译时的问题以及其它各项已知的错误

3.1. 有没有一套测试程序可以知道我的案装是否完满 ?

有的. 你可以在编译完成后键入 "make test" 来运行测试套件. 或者, 你可以在 Python 中输入: >>>import test.autotest 测试套件不会检验所有的功能, 但它会试运行许许多多的指令以确认 Python 是正常的.

3.2. 运行测试程序时, 它回报说遇到浮点运算的错误, 但我真的用 Python 写程做浮点运算时并不曾发现错误, 为什 ?

这是因为写这部分测试程序的人对 C 语言上的浮点运算的预期值做了一些不当的假设 (也许并不能说是不当, 只是在某些情况下这类假设并不保证绝对符合). 因此除非有人改正了这部分的测试程序, 否则你要自行把它注释掉. 你也可能需要手动运行别的测试集.

3.3. 执行好 configure 之后在 Link 步骤发生错误.

普遍来说, 系统设定改变之后 (就是你的 configure script 变了) 再编译时要先执行 "make clean" 指令.

3.4. Python 不接受传给程序的参数

你大概是用了 GNU 的 getopt, 例如用 -liberty 来编译, 别这样做. 理由是 GNU 的 getopt 和 System V 的不同, 它遇到非参数项时不把它当作是参数列的终结. 最快的修正方法(兼容的)是在程序前加上 '--' 号, 像这样: - #! /usr/local/bin/python -- 如果是在互动态下: - python -- script.py [options] 另外在 Python 的源码中其实有一个修改过的 getopt 版本(位于 Python/getopt.c), 不过正常编译态下不会使用它. (译按: 应可在运行 configure 时加入相关选项.)

3.5. 在 SGI 上编译时, make 要用 python 来打造 glmodule.c, 但那个时候 python 根本还没有编译好呀!

在 Setup 文件中注释掉带有 glmodule.c 那一行然后编译 python. 安装好 python 并确定它可以循 $PATH 环境找得到. 之后再修改 Setup 档回原样再建立 gl 模块. 第二步你不需要 "make clean"; 但你要在 Modules 子目录做一下 "make Makefile" (或者干脆在顶层目录打 "make" 就行).

3.6. 我用了 VPATH 来编译但结果还是输出到了源码的目录中

某些操作系统(比如说 SUN), 如果在源码目录下已经存在要编译的目标文件, 那下次编译时结果会输出到那儿而不会放到 VPATH 所指定的目的地. 这个情况多数是因为你之前用了 VPATH 以外的方法编译过. 请试一下在源码的顶层目录中运行 “make clobber” 来做一次彻底清理.

3.7. 编译和使用 GNU readline 库时遇到问题

3.8. socket I/O 在旧的 Linux 1.x 版本上有问题

编译完成 Python 后, 用它来运行一下 Lib/plat-linuex2/ 目录下的 regen 程序后再继续编译 socket I/O. 问题是出在源码中发布的几个标头档和某些旧版本的 Linux 不匹配. 注意: 这个问题只发生在很老旧的 Linux 版本 1.x.y; 这些基本上现在已没人用了.

3.9. Ultrix 的 prototypes 问题

Ultrix 的 cc 编译器有毛病 – 要不用 gcc, 再不就请 #undef 掉 HAVE_PROTOTYPES 项. == 3.10. 其它的有关操作平台某某某的问题 = 有关问题请透过 SourceForge 的 bug 追踪器提交. http://sourceforge.net/tracker/?group_id=5470&atid=105470 请尽量写得详细一些. 包括操作系统, 硬件设备, 计算机型号, 哪个版本, 和足够的错误讯息. 如果你有编译时的记录文件, 请把档案上传, 不要什么都 cut and paste 到内文中. 很可能我们手头上没有你所用的计算机设备, 因此你最好留下联络方法, 比如是 SourceForge 的户名或是电邮地址好等我们再找你拿更多数据.

3.11. 怎样在 Linux 下使用动态加载

目前这个已是自动设定的了. 只要是采用 ELF 执行档格式的版本(包括所有近期的 Linux 版本)都可以.

3.12. 为什么在 Linux2.0 (Slackware96) 上不支持编译动态模块

Slackware96 有一个小错误. 你只需要弄妥以下的 symbolic link 即可修正: /lib/libdl.so -> /lib/libdl.so.1 /lib/libdl.so.1 -> /lib/libdl.so.1.7.14. 改好了后你要删除掉 config.cache 档然后重新 configure 一次再编译即成.

3.13. Linux 下动态模块编译不了

多数是你先前用了 static 选项, 后来又在 Setup 档中选了 *shared*. 动态库一定要用 “-fpic” 选项来编译的. 如果模块已用静态方式编译了一个 .o 档出来, 你必需先把它删除掉才行. 可以在模块的目录下运行 “make clean”.

3.14. 已删除

删除的数据是关于 linux 上的线程. 当时线程的支持还没有标准的做法.

3.15. 在连结带有 C++ 程序代码的动态库时报错

要用 C++ 来连结 Python 主程序. 在 Modules/Makefile 修改 LINKCC 的定义, 以你所使用的 C++ 编译器取代原来的. 某些情况下也要同时略为改一下 config.c 使之符合 C++ 的格式.

3.16. 已删除

3.17. 已删除


PythonPowered
搜寻页面 或尝试以下动作: 附加档案, 删除页面, 本页连结图