Библиотека не загружена: @ rpath / libgfortran.4.dylib - PullRequest
1 голос
/ 12 февраля 2020

Я написал код Джулии с Games.jl,

pd_payoff = [9.0 1.0; 10.0 3.0]
A, B = Player(pd_payoff), Player(pd_payoff)
pd = NormalFormGame((A, B))
rpd = RepeatedGame(pd, 0.75)
hp_pts = outerapproximation(rpd; nH=64, maxiter=500, tol=1e-8, verbose=true, nskipprint=10)

Затем возникла следующая ошибка.

error compiling #outerapproximation#62: error compiling Optimizer#1: could not load library "/Users/myname/.julia/packages/Clp/4DejL/deps/usr/lib/libClp.1.13.11.dylib"

dlopen(/Users/myname/.julia/packages/Clp/4DejL/deps/usr/lib/libClp.1.13.11.dylib, 1): Library not loaded: @rpath/libgfortran.4.dylib   
   Referenced from: /Users/myname/.julia/packages/Clp/4DejL/deps/usr/lib/libClp.1.13.11.dylib 
   Reason: image not found

Моя /Users/myname/.julia/packages/Clp/4DejL/deps/usr/lib/ директория примерно так:

MyMacBook-Pro-2:~ myname$ ls ~/.julia/packages/Clp/4DejL/deps/usr/lib/
   libClp.1.13.11.dylib     libClpSolver.1.13.11.dylib  libCoinUtils.la         libOsiClp.dylib         libcoinlapack.la
   libClp.1.dylib           libClpSolver.1.dylib        libOsi.la               libOsiClp.la            libcoinmetis.la
   libClp.dylib             libClpSolver.dylib          libOsiClp.1.13.11.dylib libOsiCommonTests.la    libcoinmumps.la
   libClp.la                libClpSolver.la             libOsiClp.1.dylib       libcoinblas.la          pkgconfig

У кого-нибудь есть идеи по устранению этой Library not found ошибки? Я не знаком с библиотечной системой. Я думаю, что что-то не так в моей местной среде.

1 Ответ

0 голосов
/ 13 февраля 2020

Это действительно зависит от того, хотите ли вы играть с Julia изначально или вы на ру sh и готовы использовать установку на Docker.

Если вы можете пожертвовать нативным подходом, вы может создать простой Docker контейнер (встроенный в следующее Dockerfile):

FROM ubuntu:18.10

LABEL description="Environment for running Julia based codes"

RUN apt-get update
RUN apt-get install -y git
RUN apt-get install -y vim
RUN apt-get install -y libopenmpi-dev
RUN apt-get install -y openmpi-bin
RUN apt-get install -y gfortran
RUN apt-get install -y open-coarrays-bin
RUN apt-get install -y make
RUN apt-get install -y tree
RUN apt-get install -y gdb
RUN apt-get install -y curl

RUN mkdir -p /opt
ADD run.sh /opt/run.sh
RUN chmod +x /opt/run.sh

RUN useradd -ms /bin/bash fortcoder

USER fortcoder
WORKDIR /home/fortcoder

RUN echo 'PS1="[\u@coarray-docker:\w ] $ "' >> /home/fortcoder/.bashrc
RUN echo 'PATH=/home/fortcoder/opt/julia/julia-1.3.1/bin:${PATH}' >> /home/fortcoder/.bashrc

RUN mkdir -p /home/fortcoder/code

RUN mkdir -p /home/fortcoder/opt/julia
RUN curl -o /home/fortcoder/opt/julia/julia-1.3.1-linux-x86_64.tar.gz https://julialang-s3.julialang.org/bin/linux/x64/1.3/julia-1.3.1-linux-x86_64.tar.gz
RUN tar zxf /home/fortcoder/opt/julia/julia-1.3.1-linux-x86_64.tar.gz -C /home/fortcoder/opt/julia/

CMD /opt/run.sh

обязательно поставьте run.sh рядом с Dockerfile

#!/bin/bash

cat << EOF


      ***************************************************
                      Juli Docker for macOS
        -----------------------------------------------
           This Docker image allows you to play with
           Julia on macOS.

           Remember that you can easily attach other
           samples by passing

           -v ~/dir_with_code:/home/fortcoder/code

           to your 'docker -it' command

        -----------------------------------------------


EOF

/bin/bash

Затем вы можете создать контейнер следующим образом:

> docker build -t coarrays .
> mkdir sample_code
> docker run -i -t -v `pwd`/sample_code:/home/fortcoder/code coarrays

Вы можете сопоставить каталог на основе macOS (sample_code) с каталогом внутри контейнера.

Как только вы окажетесь в контейнере, просто запустите julia

> julia
> using Pkg
> Pkg.clone("https://github.com/QuantEcon/Games.jl")
┌ Warning: Pkg.clone is only kept for legacy CI script reasons, please use `add`
└ @ Pkg.API /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Pkg/src/API.jl:664
   Cloning git-repo `https://github.com/QuantEcon/Games.jl`
...
...
  Building CMake ─────→ `~/.julia/packages/CMake/nSK2r/deps/build.log`
  Building MbedTLS ───→ `~/.julia/packages/MbedTLS/a1JFn/deps/build.log`
  Building NLopt ─────→ `~/.julia/packages/NLopt/eqN9a/deps/build.log`
  Building CodecBzip2 → `~/.julia/packages/CodecBzip2/T5yr7/deps/build.log`
  Building CodecZlib ─→ `~/.julia/packages/CodecZlib/5t9zO/deps/build.log`
  Building FFTW ──────→ `~/.julia/packages/FFTW/qqcBj/deps/build.log`
  Building Rmath ─────→ `~/.julia/packages/Rmath/BoBag/deps/build.log`
  Building Clp ───────→ `~/.julia/packages/Clp/4DejL/deps/build.log`
julia>

после установки Games, вы можете выйти из julia и запустить свой код. Просто создайте файл внутри Docker контейнера (code.jl).

using Games
pd_payoff = [9.0 1.0; 10.0 3.0]
A, B = Player(pd_payoff), Player(pd_payoff)
pd = NormalFormGame((A, B))
rpd = RepeatedGame(pd, 0.75)
hp_pts = outerapproximation(rpd; nH=64, maxiter=500, tol=1e-8, verbose=true, nskipprint=10)

и запустите его

> julia ./code.jl
10  0.08865814883358247 (2.709875698216042, 2.7098756982160457)
20  0.004992651968453998    (2.9836620808639114, 2.983662080863915)
30  0.0002811537800653241   (2.9990799543504063, 2.9990799543504094)
40  1.5832757529921082e-5   (2.9999481889957704, 2.9999481889957793)
50  8.915982272483802e-7    (2.999997082340249, 2.999997082340251)
60  5.020902937857841e-8    (2.999999835696323, 2.9999998356963244)
>
...