我试图在这个Debian lenny系统上将应用程序与g ++链接起来.ld抱怨它无法找到指定的库.这里的具体示例是ImageMagick,但我也遇到了类似的问题.
我正在调用链接器:
g++ -w (..lots of .o files/include directories/etc..) \
-L/usr/lib -lmagic
Run Code Online (Sandbox Code Playgroud)
ld抱怨:
/usr/bin/ld: cannot find -lmagic
Run Code Online (Sandbox Code Playgroud)
然而,libmagic存在:
$ locate libmagic.so
/usr/lib/libmagic.so.1
/usr/lib/libmagic.so.1.0.0
$ ls -all /usr/lib/libmagic.so.1*
lrwxrwxrwx 1 root root 17 2008-12-01 03:52 /usr/lib/libmagic.so.1 -> libmagic.so.1.0.0
-rwxrwxrwx 1 root root 84664 2008-09-09 00:05 /usr/lib/libmagic.so.1.0.0
$ ldd /usr/lib/libmagic.so.1.0.0
linux-gate.so.1 => (0xb7f85000)
libz.so.1 => /usr/lib/libz.so.1 (0xb7f51000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7df6000)
/lib/ld-linux.so.2 (0xb7f86000)
$ sudo ldconfig -v | grep "libmagic"
libmagic.so.1 -> libmagic.so.1.0.0
Run Code Online (Sandbox Code Playgroud)
我如何进一步诊断这个问题,哪些可能是错的?我做的事情完全是愚蠢的吗?
我知道LD_LIBRARY_PATH是邪恶的,避免使用它是一个好习惯.我有一个server.c远程Solaris 9服务器上的程序,它包含两个版本的openssl库(0.9.8和1.0.0),我使用的是gcc 3.4.6.我的程序需要链接到1.0.0a版本.因为它是工作环境,所以我无权修改openssl库目录中的任何内容.我想出用两个-L和-R选项编译我的程序而没有设置LD_LIBRARY_PATH,它工作正常.(我注意到没有设置-R选项它将无法工作)但编译后的程序保持链接/usr/local/ssl/lib/libssl.so.0.9.8而不是/.../libssl.so.1.0.0.有解决办法吗?
顺便说一句,如果我错了,请纠正我:是否-R在运行时实际"链接"共享库并且-L选项仅在编译时"加载"共享库?
任何帮助都感激不尽!
Z.Zen
//////////////////////////////////////////////
这是我的Makefile:
CC = gcc
OPENSSLDIR = /usr/local/ssl
CFLAGS = -g -Wall -W -I${OPENSSLDIR}/include -O2 -D_REENTRANT -D__EXTENSIONS__
RPATH = -R${OPENSSLDIR}/lib
LD = ${RPATH} -L${OPENSSLDIR}/lib -lssl -lcrypto -lsocket -lnsl -lpthread
OBJS = common.o
PROGS = server
all: ${PROGS}
server: server.o ${OBJS}
${CC} server.o ${OBJS} -o server ${LD}
clean:;
${RM} ${PROGS} *.ln *.BAK *.bak …Run Code Online (Sandbox Code Playgroud) 所以我一直在做以下事情:
$ pprof /bin/ls ls.prof
Using local file /bin/ls.
Gathering CPU profile from http://ls.prof/pprof/profile?seconds=30 for 30 seconds to
/home/user/csteifel/pprof/ls.1414597606.ls.prof
Be patient...
curl: (7) couldn't connect to host
Failed to get profile: curl 'http://ls.prof/pprof/profile?seconds=30' > /home/user/csteifel/pprof/.tmp.ls.1414597606.ls.prof: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我不确定这里是什么,因为这是他们在这里展示的一个例子:http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.html
现在我明白ls实际上不会有信息,但我也知道它不应该给我一个关于curl的错误,在这种情况下它应该是别的东西.我在这做错了什么?
我也尝试过这样做我创建的示例程序(例如:pprof --callgrind /home/user/csteifel/testing2/X86_64_DEBUG/el6/wtf ~/testing2/prof.out > callgrind.out我得到一个类似的错误:
Using local file /home/user/csteifel/testing2/X86_64_DEBUG/el6/wtf.
Use of uninitialized value $host in substitution (s///) at /home/user/csteifel/usr/local/lib/bin/pprof line 3195.
Use of uninitialized value $hostport in concatenation (.) or …Run Code Online (Sandbox Code Playgroud)