ld 在空环境中找不到 -lz,即使有 LIBRARY_PATH、LD_LIBRARY_PATH 和 LD_PRELOAD

ld cannot find -lz in an empty environment even with LIBRARY_PATH, LD_LIBRARY_PATH and LD_PRELOAD

提问人:Dr. Timofey Prodanov 提问时间:7/19/2019 更新时间:7/19/2019 访问量:517

问:

我正在尝试创建一个包,其中包含必须使用 .但是,当软件包正在构建时,即使我为其提供了任何可能的路径,也找不到。condac-lzldzlib

据我了解,创建几乎为空的环境,然后用必要的库和工具填充它。它还安装 ,因此有 in 和 in 。condazlibzlib.h$BUILD_PREFIX/include/libz.so, libz.a$BUILD_PREFIX/lib

编译本身看起来像

$BUILD_PREFIX/bin/x86_64-conda_cos6-linux-gnu-cc -fPIC -g -Wall -O2 -Wc++-compat main.o -o <name> -L. -l<name> -lm -lz -lpthread

x86_64-conda_cos6-linux-gnu-cc是 ,它调用此处定义为 。然后出现错误。gcc version 7.3.0ld$BUILD_PREFIX/bin/x86_64-conda_cos6-linux-gnu-ldldcannot find -lz

我试过使用

export C_INCLUDE_PATH="$BUILD_PREFIX/include"
export LIBRARY_PATH="$BUILD_PREFIX/lib"
export LD_LIBRARY_PATH="$BUILD_PREFIX/lib"
export LD_PRELOAD="$BUILD_PREFIX/lib/libz.so"

在任何组合中,但这不起作用。

有没有其他方法可以显示库的路径?ld

c gcc conda ld libz

评论

1赞 Vladislav Ivanishin 7/19/2019
这些都是错的。特别是,这些是在加载时而不是在链接时查看的。通过 gcc 命令行上的选项传递路径(目前您有 ,它告诉 gcc 告诉链接器在当前工作目录中查找库 - 除了正常的系统路径)。LD_*-L-L.
0赞 zwol 7/19/2019
请显示 的输出。cd $BUILD_PREFIX/lib && ls -l libz*
0赞 Dr. Timofey Prodanov 7/20/2019
@zwol .但@VladislavIvanishin的评论有所帮助libz.alibz.so -> libz.so.1.2.11libz.so.1 -> libz.so.1.2.11libz.so.1.2.11

答: 暂无答案