gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 12:01:52 25 4
gpt4 key购买 nike

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

自定义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: line 1: @ar: command not found

我哪里错了?

最佳答案

Where I'm wrong ?

你错了,你错误地修改了你的 Makefile

你有一个宏 Q,它的计算结果为 @,这使得 make 安静(不打印它执行的命令)if @ 是命令行的第一个字符。通过将 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 ...

关于linux - 在 makefile 中设置共享库的路径以进行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32200799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com