【问题标题】:LD_LIBRARY_PATH: Does only work when startup call is also on same lineLD_LIBRARY_PATH:仅当启动调用也在同一行时才有效
【发布时间】:2014-09-03 08:52:37
【问题描述】:

我可以在 makefile 中使用以下命令启动我的程序:

LD_LIBRARY_PATH=$(CUDAHOME)/lib64:$(LIBHOME)/boost_1_54_0/stage/lib mpiloader -np 2 ./program

当我切换到同一命令的两行版本时(似乎任何人都这样做)

export LD_LIBRARY_PATH=$(CUDAHOME)/lib64:$(LIBHOME)/boost_1_54_0/stage/lib 
mpiloader -np 2 ./program

boost 中的库已找不到:

./program: error while loading shared libraries: libboost_chrono.so.1.54.0: cannot open shared object file: No such file or directory

据我了解,启动代码的第一行和第二行版本应该完全相同。那么这里有什么问题呢?

【问题讨论】:

    标签: linux makefile shared-libraries


    【解决方案1】:

    默认情况下,Makefile 中的每个配方行都会调用一个新的 shell 实例,因此您的 export 仅在第一行完成执行之前有效。

    使用 GNU make,您可以通过定义 .ONESHELL 特殊目标来更改此行为:

    .ONESHELL:
    all:
        @export foo=bar
        @echo $$foo
    

    输出

    bar
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      • 2013-02-20
      • 1970-01-01
      相关资源
      最近更新 更多