在makefile中设置共享库的路径以进行编译

Famedoro

我想使用makefile编译一个程序,该程序与zlib共享库链接,该库与系统上安装的库不同。但是我不希望将它们永久添加到系统的库池中。

定制zlib的路径是/usr/work/libxlsxwriter-master/zlib-1.2.8

我试图使用类似的东西:

ZLIBDIR=/usr/work/libxlsxwriter-master/zlib-1.2.8

# The static library.
$(LIBXLSXWRITER_A) : $(OBJS)
    export LD_LIBRARY_PATH=$(ZLIBDIR):$(DEPENDENCIES); \
    $(Q)$(AR) $(ARFLAGS)     $@ $(MINIZIP_DIR)/ioapi.o $(MINIZIP_DIR)/zip.o  $^

 # The dynamic library.
 $(LIBXLSXWRITER_SO) : $(SOBJS)
    export LD_LIBRARY_PATH=$(ZLIBDIR):$(DEPENDENCIES); \
    $(Q)$(CC) $(SOFLAGS)  -o $@ $(MINIZIP_DIR)/ioapi.so $(MINIZIP_DIR)/zip.so $^ -lz

# Targets for the object files.
%.o  : %.c $(HDRS)
    $(Q)$(CC)       -I$(INC_DIR) $(CFLAGS) $(CXXFLAGS) -c $<

 %.so : %.c $(HDRS)
    $(Q)$(CC) -fPIC -I$(INC_DIR) $(CFLAGS) $(CXXFLAGS) -c $< -o $@

  %.to : %.c $(HDRS)
    $(Q)$(CC) -g -O0 -DTESTING -I$(INC_DIR) $(CFLAGS) $(CXXFLAGS) -c $< -o $@

当我尝试编译时,出现以下错误:/ bin / sh:第1行:@ar:找不到命令

我哪里错了?

受雇于俄罗斯

我哪里错了?

您错误地修改了您的内容Makefile

您有一个宏Q,其结果为@如果make是命令行的第一个字符,则将使其安静(不打印其执行的命令)。通过添加到命令行,您已经搞砸了: @LD_LIBRARY_PATH

# this is a quiet command:
@ar ...

# this is a not quiet command, which tries to execute @ar, which doesn't exist:
LD_LIBRARY_PATH=... ; @ar ...

错误的第二部分是,LD_LIBRARY_PATH您所做的设置仅会影响构建(即编译器和链接器)。您想要的是使用这些库来影响运行时而不是用来构建它们的编译器和链接器。

正如DevSolar正确指出的那样,您需要-rpath

$(Q)$(CC) $(SOFLAGS) -o $@ $(MINIZIP_DIR)/ioapi.so \
  -Wl,-rpath=$(ZLIBDIR) $(MINIZIP_DIR)/zip.so ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章