Почему extra-lib-dirs не могут работать как стек LD_LIBRARY_PATH? - PullRequest
0 голосов
/ 02 апреля 2020

- extra-lib-dirs должен якобы функционировать как LD_LIBRARY_PATH, но при использовании с stack exec я вижу разные результаты:

$ stack --extra-lib-dirs=$MATLAB_PATH/bin/glnxa64 --extra-include-dirs=$MATLAB_PATH/extern/include --nix exec matlab-engine-test
/home/bebarker/workspace/haskell-matlab/.stack-work/install/x86_64-linux-nix/24c5769e9013838d87aa76fb4cdd10a09798b6904a6faa380de6fe6949e2c952/8.6.5/bin/matlab-engine-test: error while loading shared libraries: libmx.so: cannot open shared object file: No such file or directory

$ LD_LIBRARY_PATH=$MATLAB_PATH/bin/glnxa64 /home/bebarker/workspace/haskell-matlab/.stack-work/install/x86_64-linux-nix/24c5769e9013838d87aa76fb4cdd10a09798b6904a6faa380de6fe6949e2c952/8.6.5/bin/matlab-engine-test
matlab-engine-test: user error (engOpen)

LD_LIBRARY_PATH ведет себя как ожидается в этом случае (хотя, очевидно, у меня есть еще одна не связанная с этим проблема). Стоит ли искать другой вариант или я неправильно использую --extra-lib-dirs?

1 Ответ

1 голос
/ 02 апреля 2020

Я не склонен использовать Stack, но в системах сборки путь к библиотеке, предоставляемый флагами командной строки, обычно передается только компоновщику. Заметьте (с main = print =<< lookupEnv "LD_LIBRARY_PATH"):

$ stack --extra-lib-dirs=/foopath/bin/glnxa64 --extra-include-dirs=/foopath/extern/include exec ./foo
Just ""
$

Сравните с тем, что вы сделали вторым:

$ LD_LIBRARY_PATH=/foopath/bin/glnxa64 ./foo
Just "/foopath/bin/glnxa64"
...