ocaml oUnit и main ocaml lib правят противоречиви предположения относно внедряването на Unix

Несъвместимите предположения върху интерфейса (Ocaml) предполагат да изградя отново и опитах това, но безрезултатно.

Използвам mac port за управление на повечето от моите инструменти за разработка и след надграждането до 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.

person Mike Samuel    schedule 23.12.2012    source източник
comment
Може да искате да преминете към използване на opam, за да инсталирате OCaml.   -  person Ashish Agarwal    schedule 24.12.2012


Отговори (1)


Преминаването към ядрено оръжие реши проблема:

Преинсталирайте портове

За да преинсталирате вашите портове:

  1. Запазете списъка с инсталирани портове:

    порт -qv инсталиран > myports.txt

  2. Деинсталирайте всички инсталирани портове:

    sudo port -f деинсталиране инсталиран

  3. Почистете всички частично завършени компилации:

    sudo порт изчисти всички

  4. Прегледайте myports.txt и инсталирайте портовете, които всъщност искате да използвате (за разлика от тези, които са необходими само като зависимости) един по един, като не забравяте да посочите подходящите варианти:

    sudo порт инсталира порт име +вариант1 +вариант2 …

Имайте предвид, че ако сте посочили варианти, които не са по подразбиране, може да се наложи да инсталирате портове в ред, различен от азбучния ред, записан в myports.txt.

person Mike Samuel    schedule 24.12.2012