2

インターフェイス(Ocaml)での一貫性のない仮定は、私が再構築し、それを試したが役に立たなかったことを示唆しています。

私はほとんどの開発ツールを管理するためにmacポートを使用していますが、Mac OS 10.8.2にアップグレードしてから、ocamlとocaml-ounitの間の相互作用が悪いようです。

以下は非常に最小限のシェルダンプですが、問題は

 Error: Files /opt/local/lib/ocaml/site-lib/oUnit/oUnit.cmxa
        and /opt/local/lib/ocaml/unix.cmxa
        make inconsistent assumptions over implementation Unix

http://www.puredarwin.org/developers/macports/portで説明されているように再構築を強制しても、問題は解決されないようです。

アップグレード(再構築)を強制するには、次を使用します。

          port -f upgrade vim

以下は、ネイティブバイナリを構築する試み(.byte正常に動作しますが、プロファイリングのラウンドを開始し、ネイティブ実行のプロファイルを作成しようとしています)とMacポートを自分の意志に曲げようとする試みのシェルダンプです。

この問題をさらに調査する方法についての考えは大歓迎です。自分でソースからocamlを構築し始めたくないのは、プロジェクトを同僚に配布して、彼らが物事を稼働させるために何をする必要があるかについて最小限の指示で配布できるようにしたいので、可能な場合はバニラパッケージを使用したいと思います。

 > ocaml make.ml PegParserTest.native
 ocamlbuild \
         -libs \
         nums,str,unix,oUnit,graph \
         -cflags \
         -g,-w,+a-4,-warn-error,+a-4,-I,/opt/local/lib/ocaml/site-lib/oUnit,-I,/opt/local/lib/ocaml/site-lib/ocamlgraph \
         -lflags \
         -g,-I,/opt/local/lib/ocaml/site-lib/oUnit,-I,/opt/local/lib/ocaml/site-lib/ocamlgraph \
         PegParserTest.native
 + /opt/local/bin/ocamlopt.opt -g -I /opt/local/lib/ocaml/site-lib/oUnit -I /opt/local/lib/ocaml/site-lib/ocamlgraph nums.cmxa str.cmxa unix.cmxa oUnit.cmxa graph.cmxa BinSearch.cmx ByteInput.cmx ByteOutput.cmx ListUtil.cmx Stringer.cmx Range.cmx Unicode.cmx CaseFold.cmx EditDistance.cmx SourcePosition.cmx Utf8.cmx Grammar.cmx Failures.cmx Opt.cmx StringUtil.cmx Path.cmx UnicodeCategories.cmx UnicodeSeq.cmx GrammarParser.cmx AnnotationChecker.cmx ArrayUtil.cmx BitBucket.cmx CodeUnit.cmx Conv.cmx DefaultProductions.cmx Encodable.cmx Flatten.cmx Trie.cmx FactorLeft.cmx Followers.cmx Inline.cmx PreSimplify.cmx SymmetricBoolMatrix.cmx TailCallOpt.cmx UnionPartition.cmx Simplifier.cmx FileTestSuite.cmx NumberSystem.cmx Regex.cmx PegParser.cmx ScalarCharValue.cmx TestHarnessWrapper.cmx PegParserTest.cmx -o PegParserTest.native
 File "_none_", line 1:
 Error: Files /opt/local/lib/ocaml/site-lib/oUnit/oUnit.cmxa
        and /opt/local/lib/ocaml/unix.cmxa
        make inconsistent assumptions over implementation Unix
 Command exited with code 2.
 Compilation unsuccessful after building 154 targets (153 cached) in 00:00:00.
 
 > sudo port selfupdate 
 --->  Updating MacPorts base sources using rsync
 MacPorts base version 2.1.2 installed,
 MacPorts base version 2.1.2 downloaded.
 --->  Updating the ports tree
 --->  MacPorts base is already the latest version
 
 The ports tree has been updated. To upgrade your installed ports, you should run
   port upgrade outdated
 
 > sudo port upgrade outdated
 --->  Computing dependencies for automake
 ELIDED
 --->  Updating database of binaries: 100.0%
 --->  Scanning binaries for linking errors: 100.0%
 --->  No broken files found.
 
 > port contents ocaml | grep -i unix.cm
   /opt/local/lib/ocaml/threads/threadUnix.cmi
   /opt/local/lib/ocaml/threads/threadUnix.cmx
   /opt/local/lib/ocaml/unix.cma
   /opt/local/lib/ocaml/unix.cmi
   /opt/local/lib/ocaml/unix.cmx
   /opt/local/lib/ocaml/unix.cmxa
   /opt/local/lib/ocaml/unix.cmxs
   /opt/local/lib/ocaml/vmthreads/threadUnix.cmi
   /opt/local/lib/ocaml/vmthreads/unix.cma
 
 > port contents ocaml-ounit | egrep '\.cm'
   /opt/local/lib/ocaml/site-lib/oUnit/oUnit.cma
   /opt/local/lib/ocaml/site-lib/oUnit/oUnit.cmi
   /opt/local/lib/ocaml/site-lib/oUnit/oUnit.cmx
   /opt/local/lib/ocaml/site-lib/oUnit/oUnit.cmxa
   /opt/local/lib/ocaml/site-lib/oUnit/oUnit.cmxs
   /opt/local/lib/ocaml/site-lib/oUnit/oUnitDiff.cmi
   /opt/local/lib/ocaml/site-lib/oUnit/oUnitDiff.cmx
 
 > sudo port -f upgrade ocaml-ounit ocaml
 Password:
 --->  Scanning binaries for linking errors: 100.0%
 --->  No broken files found.
4

1 に答える 1

2

になることで問題は解決しました。

ポートの再インストール

ポートを再インストールするには:

  1. インストールされているポートのリストを保存します。

    port -qv インストール済み > myports.txt

  2. インストールされているすべてのポートをアンインストールします。

    sudo ポート -f アンインストールがインストールされました

  3. 部分的に完了したビルドを消去します。

    sudo port clean all

  4. myports.txt を参照し、(依存関係としてのみ必要なポートではなく) 実際に使用するポートを 1 つずつインストールします。適切なバリアントを指定することを忘れないでください。

    sudo ポート インストール ポート名 +variant1 +variant2 …</p>

デフォルトではないバリアントを指定した場合、myports.txt に記録されているアルファベット順以外の順序でポートをインストールする必要がある場合があることに注意してください。

于 2012-12-24T06:59:02.873 に答える