【发布时间】:2011-08-27 13:08:43
【问题描述】:
您好,我正在尝试安装新版本的 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)
【问题讨论】:
-
如果你把
-lz放在第一位呢?此外,您可以将-pthread作为编译器选项,因此您不必手动链接。