我正在尝试编译一个需要zlib v1.2.8的包。系统 - 我没有root访问权限 - 在/ lib64中有zlib 1.2.3。我构建了更新版本的zlib并更改了makefile,如下所示:
CFLAGS=-I/mydir/zlib/include
LDFLAGS=-L/mydir/zlib/lib -lz -lm -lpthread -lbz2
这成功编译并链接,但在运行时我得到
/lib64/libz.so.1: version `ZLIB_1.2.3.3' not found (required by ./myapp)
如何让链接器忽略旧版本的zlib?
答案 0 :(得分:1)
您可以使用以下方法静态链接:
LDFLAGS=-L/mydir/zlib/lib -Wl,-Bstatic -lz -Wl,-Bdynamic -lm -lpthread -lbz2
或者您可以使用runpaths:
LDFLAGS=-L/mydir/zlib/lib -Wl,-rpath,/mydir/zlib/lib -lz -lm -lpthread -lbz2
-Wl
标志用于告诉gcc"将此标志直接传递给链接器,并且根本不进行检查"。
链接器标志记录在GNU binutils ld manual。
中tl;博士:
-Bstatic
:在命令行中使用静态链接-Bdynamic
:在命令行中的这一点之后使用动态链接-rpath
:在程序中保存此路径并告诉ld.so在运行时首先搜索库