【问题标题】:How to directly export LD_LIBRARY_PATH in makefile如何在makefile中直接导出LD_LIBRARY_PATH
【发布时间】:2021-08-06 08:22:46
【问题描述】:

我想直接在我的 Makefile 中导出一个共享库。因此,我浏览了 stackoverflow 并按照此页面上列出的步骤操作:How to export directly in a Makefile?。但它们不适用于我的 Makefile。

如果我使用终端手动导出它(LD_LIBRARY_PATH),它可以工作。 我想知道直接使用makefile导出LD_LIBRARY_PATH的正确方法是什么。

如果我不在终端中手动导出,我会收到此错误:
./myProgram.exe: error while loading shared libraries: libcustom.so: cannot open shared object file: No such file or directory

其他信息: 如果我首先使用终端导出,然后创建并运行 .exe

,则应用程序可以正常工作

这是我的Makefile

CXXFLAGS = -Wall -std=c++11
LD       =  $(CXX) 
RM       =  rm

PLATFORM   = LINUX64

LIB        = /my_path/lib/
         
SO         = $(LIB)/libCustom.so
L1_SO      = $(LIB)/libCustom1.so

INC        = /my_path/inc
L1_INC     = /my_path/L1/C/inc
export: export LD_LIBRARY_PATH=/smthing/here:$(LD_LIBRARY_PATH)

EXE  = myProgram.exe
SRCS = myProgram.cpp
OBJS = ${SRCS:.cpp=.o}

.SUFFIXES: .o .cpp
.cpp.o :
       $(CXX) $(CXXFLAGS) -c $< -I$(INC) -I$(L1_INC)

all: $(EXE)

$(EXE): $(OBJS)
       @export MY_ENV_VAR=/smthing/here; \
       $(LD) -o $@ $(OBJS) -L$(LIB) -lCustom -lCustom1 -ldl -lrt -lz
       @echo make $(EXE) successful...

  clean:
       rm -fr *Log $(EXE) *.o

【问题讨论】:

  • 你打算通过 Makefile 运行你的程序吗??
  • 是的,我是通过makefile执行的
  • 您使用make' 构建程序,然后运行它。它们不在同一范围内。你在 Makefile 中导出的 var 只在里面有效
  • 你能告诉我如何在程序运行的同一范围内导出它吗?

标签: c++ bash makefile shared-libraries


【解决方案1】:

你可以参考下面的例子

CXXFLAGS = -Wall -std=c++11
LD       =  $(CXX) 
RM       =  rm

PLATFORM   = LINUX64

LIB        = /my_path/lib/
         
SO         = $(LIB)/libCustom.so
L1_SO      = $(LIB)/libCustom1.so

INC        = /my_path/inc
L1_INC     = /my_path/L1/C/inc
export LD_LIBRARY_PATH += /smthing/here

EXE  = myProgram.exe
SRCS = myProgram.cpp
OBJS = ${SRCS:.cpp=.o}

.SUFFIXES: .o .cpp
.cpp.o :
       $(CXX) $(CXXFLAGS) -c $< -I$(INC) -I$(L1_INC)

all: $(EXE)

$(EXE): $(OBJS)
       $(LD) -o $@ $(OBJS) -L$(LIB) -lCustom -lCustom1 -ldl -lrt -lz
       @echo make $(EXE) successful...
       ./$@

  clean:
       rm -fr *Log $(EXE) *.o

【讨论】:

  • @nhatq,我刚试过这个,但我得到了同样的错误。
  • 您可能需要更正 LD_LIBRARY_PATH 的路径。 ./$@ 是在 Makefile 中执行程序并设置 LD_LIBRARY_PATH
  • 我重新检查了 LD_LIBRARY_PATH 的路径,并尝试使用 ./$@ 执行程序,但没有成功
  • 你确定 lib libcustom.so 已经在路径中了吗?可以展示一下吗??
  • 是否可以更改调用make的shell的环境变量?因为,我试图在 makefile 中做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
  • 1970-01-01
  • 2016-01-05
相关资源
最近更新 更多