1

我正在尝试编译 Z3 版本 4.1.2。成功配置后,当您执行“make”时,我收到以下错误:

Makefile:151: lib.srcs: No such file or directory
Makefile:152: shell.srcs: No such file or directory
Makefile:153: test.srcs: No such file or directory
Making test.srcs...
/usr/local/bin/dos2unix takes only stdin and stdout
make: *** [test.srcs] Error 1
4

1 回答 1

3

我认为问题在于所有文本文件都z3-src-4.1.2.zip使用“回车”(cr)和“换行”(lf)来编码行终止。zip 是在 Windows 机器上创建的。另一个问题是“dos2unix”应用程序。它是一个将 windows/dos 文本文件转换为 unix/linux/osx 文本文件的应用程序。这是一个非常简单的应用程序。它只是用 lf 替换 cr/lf。在 Linux 上,此应用程序采用一个参数:要修改的文件名。

我目前正在开发一个新的构建系统来避免这个问题。同时,这里有一些解决方法。

1) 使用 git 检索源。git 将处理 cr/lf vs lf 问题。这是检索 Z3 的命令:

git 克隆https://git01.codeplex.com/z3

如果这样做,则不需要使用 dos2unix。因此,您可以删除 Makefile.in 中的 @$(DOS2UNIX) 行。另一种选择是在 Makefile.in 的开头将 DOS2UNIX=@D2U@ 替换为 DOS2UNIX=touch

在这些更改之后,您应该能够在 OSX 上编译它。我在 OSX 10.7 上成功编译了它。

2)获取“不稳定”分支。

http://z3.codeplex.com/SourceControl/changeset/view/946a06cddbe4

这是当前的“工作分支”。它包含新的构建系统。它尚未准备好,但足以生成 Z3 可执行文件。以下是使用此分支构建 Z3 的说明

从上面的页面下载代码。或者使用 git 来检索“不稳定”的分支。然后,执行

   autoconf
   ./configure
   python scripts/mk_make.py
   cd build
   make

上周五我设法在 OSX 10.7 上编译它。

3) 保留 .zip,但转换所有文本文件。我正在使用以下 python 脚本来转换新构建系统中的所有文件。如果您在 Z3 根目录中执行此 python 脚本,它将转换所有文件。

import os
import glob
import re
import getopt
import sys
import shutil

def is_cr_lf(fname):
    # Check whether text files use cr/lf
    f = open(fname, 'r')
    line = f.readline()
    sz = len(line)
    return sz >= 2 and line[sz-2] == '\r' and line[sz-1] == '\n'

# dos2unix in python
#    cr/lf --> lf
def dos2unix(fname):
    if is_cr_lf(fname):
        fin  = open(fname, 'r')
        fname_new = '%s.new' % fname
        fout = open(fname_new, 'w')
        for line in fin:
            line = line.rstrip('\r\n')
            fout.write(line)
            fout.write('\n')
        fin.close()
        fout.close()
        shutil.move(fname_new, fname)
        if is_verbose():
            print "dos2unix '%s'" % fname

def dos2unix_tree_core(pattern, dir, files):
    for filename in files:
        if fnmatch(filename, pattern):
            fname = os.path.join(dir, filename)
            if not os.path.isdir(fname):
                dos2unix(fname)

def dos2unix_tree():
    os.path.walk('.', dos2unix_tree_core, '*')

dos2unix_tree()
于 2012-10-28T01:11:37.623 回答