尝试链接目标文件时出错:
$ g++ -o intro intro.o -L -Wl,-rpath-link -lnotes -lm -lnsl -lpthread -lc -lresolv -ldl
/usr/bin/ld: cannot find -lnotes
collect2: ld returned 1 exit status
然而,图书馆似乎就在那里(事实上,我把/opt/ibm/lotus/notes
包含在/etc/ld.so.conf.d/
中并运行ldconfig
)中将其放在那里:
$ ldconfig --print-cache | grep libnotes
361: libnoteswc.so (libc6) => /opt/ibm/lotus/notes/libnoteswc.so
362: libnotes.so (libc6) => /opt/ibm/lotus/notes/libnotes.so
为什么链接失败以及如何使链接器使用这些共享对象?
答案 0 :(得分:1)
GCC没有指定运行路径,因此动态链接器可以在运行时找到动态库...另一个适用于几个平台的选项是将库的完整路径名硬编码到其soname中。这只能通过在libstdc ++ / config(以及libg ++ / config,如果你正在构建libg ++)中修改相应的.ml文件来实现,这样$(libdir)/出现在-soname或-h选项中的库名之前
答案 1 :(得分:1)
尝试使用ld的-L标志。我的Makefile之一的一个例子:
CFLAGS=-c -Wall -O2 \
-I../libs/libs-x86/include
LDFLAGS=-lupnp \
-L ../libs/libs-x86/lib
我认为“/etc/ld.so.conf.d/”中描述的库仅用于运行时...希望这有帮助!