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マシンで作成されました。もう1つの問題は、「dos2unix」アプリケーションです。これは、windows/dosテキストファイルをunix/linux/osxテキストファイルに変換するアプリケーションです。とてもシンプルなアプリケーションです。cr/lfをlfに置き換えるだけです。Linuxでは、このアプリケーションは1つの引数を取ります。変更するファイル名です。

私は現在、この問題を回避する新しいビルドシステムに取り組んでいます。それまでの間、ここでいくつかの回避策を示します。

1)gitを使用してソースを取得します。gitはcr/lfvslfの問題を処理します。Z3を取得するためのコマンドは次のとおりです。

git clone https://git01.codeplex.com/z3

その場合、dos2unixを使用する必要はありません。したがって、Makefile.inの@ $(DOS2UNIX)行を削除できます。もう1つのオプションは、Makefile.inの先頭でDOS2UNIX = @D2U@をDOS2UNIX=touchに置き換えることです。

これらの変更後、OSXでコンパイルできるようになります。OSX10.7で正常にコンパイルしました。

2)「不安定な」ブランチを取得します。

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

これは現在の「作業ブランチ」です。新しいビルドシステムが含まれています。準備はできていませんが、Z3実行可能ファイルを生成するには十分です。このブランチを使用してZ3をビルドする手順は次のとおりです

上記のページからコードをダウンロードします。または、gitを使用して「不安定な」ブランチを取得します。次に、実行します

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

先週の金曜日にOSX10.7でコンパイルできました。

3).zipを保持しますが、すべてのテキストファイルを変換します。次のPythonスクリプトを使用して、新しいビルドシステムのすべてのファイルを変換しています。このPythonスクリプトをZ3ルートディレクトリで実行すると、すべてのファイルが変換されます。

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 に答える