与“本地”链接库的版本

发布于 2024-12-01 17:10:05 字数 1620 浏览 1 评论 0原文

您好,我正在尝试安装新版本的 zlib,但我没有 root 权限,因此我将在本地安装它。系统安装是 1.2.3,我尝试使用 1.2.5

我像

g++ -g myProg.cpp myOs.o -lpthread -IzlibInc/  -LzlibLib/ -lz  -o myProg

使用 ldd 一样进行编译,它说

    ldd myProg
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003c15800000)
libz.so.1 => /usr/lib64/libz.so.1 (0x0000003c15c00000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003c17400000)
libm.so.6 => /lib64/libm.so.6 (0x0000003c15400000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003c17000000)
libc.so.6 => /lib64/libc.so.6 (0x0000003c14c00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003c14800000)

所以它没有正确链接。

感谢

/////////////////////////////////////////////

更新,

我有 2 个名为 zlibInc 和 zlibLib 的文件夹,其中包含标头和共享对象文件。

ls zlibLib/
libz.a  libz.so  libz.so.1  libz.so.1.2.5  pkgconfig
ls zlibInc/
zconf.h  zlib.h

我的源代码是

cat zlibTest.cpp
#include <cstdio>
#include <zlib.h>

int main(){
  fprintf(stderr,"%s\n",ZLIB_VERSION);
  int *a=new int[10];

  gzread(stdin,a,5);
  return 0;
}

我的编译命令行是

g++ zlibTest.cpp   -I zlibInc/ -L zlibLib/ -L . -I . -lz;ldd a.out
libz.so.1 => /usr/lib64/libz.so.1 (0x0000003c15c00000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003c17400000)
libm.so.6 => /lib64/libm.so.6 (0x0000003c15400000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003c17000000)
libc.so.6 => /lib64/libc.so.6 (0x0000003c14c00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003c14800000)

Hi I'm trying to install a newversion of zlib, and I dont have root rights, so I'll just install it locally. System install is 1.2.3, and I'm trying to use 1.2.5

I compile like

g++ -g myProg.cpp myOs.o -lpthread -IzlibInc/  -LzlibLib/ -lz  -o myProg

using ldd it says

    ldd myProg
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003c15800000)
libz.so.1 => /usr/lib64/libz.so.1 (0x0000003c15c00000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003c17400000)
libm.so.6 => /lib64/libm.so.6 (0x0000003c15400000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003c17000000)
libc.so.6 => /lib64/libc.so.6 (0x0000003c14c00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003c14800000)

So it doesnt link correctly.

Thanks

/////////////////////////////////////////////

update

I have 2 folders called zlibInc and zlibLib containint the headers and the shared object files.

ls zlibLib/
libz.a  libz.so  libz.so.1  libz.so.1.2.5  pkgconfig
ls zlibInc/
zconf.h  zlib.h

my sourcecode is

cat zlibTest.cpp
#include <cstdio>
#include <zlib.h>

int main(){
  fprintf(stderr,"%s\n",ZLIB_VERSION);
  int *a=new int[10];

  gzread(stdin,a,5);
  return 0;
}

And my command line for compiling is

g++ zlibTest.cpp   -I zlibInc/ -L zlibLib/ -L . -I . -lz;ldd a.out
libz.so.1 => /usr/lib64/libz.so.1 (0x0000003c15c00000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003c17400000)
libm.so.6 => /lib64/libm.so.6 (0x0000003c15400000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003c17000000)
libc.so.6 => /lib64/libc.so.6 (0x0000003c14c00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003c14800000)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

↘紸啶 2024-12-08 17:10:05

它确实链接正确。本地 zlib 和系统范围的 zlib 具有相同的 SONAME,并且运行时链接器对您的本地版本一无所知。您可以向链接器提供 -rpath 选项 (-Wl,-rpath=./zlibLib),或在运行时设置 LD_LIBRARY_PATH 环境变量-time (LD_LIBRARY_PATH=./zlibLib:$LD_LIBRARY_PATH ./myProg)。

It does link correctly. Local zlib and system-wide zlib have the same SONAME, and run-time linker knows nothing of your local version. You can either supply -rpath option to the linker (-Wl,-rpath=./zlibLib), or set LD_LIBRARY_PATH environment variable at run-time (LD_LIBRARY_PATH=./zlibLib:$LD_LIBRARY_PATH ./myProg).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文