尝试链接目标文件时出现错误:
$ 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
然而,这个库似乎在那里(实际上,我通过在/etc/ld.so.conf.d/
文件中包含/opt/ibm/lotus/notes
并运行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
为什么链接失败,我怎样才能让链接器使用这些共享对象?
尝试使用-L标志为ld。 我的一个Makefile的例子:
CFLAGS=-c -Wall -O2 \ -I../libs/libs-x86/include LDFLAGS=-lupnp \ -L ../libs/libs-x86/lib
我认为“/etc/ld.so.conf.d/”中描述的库仅用于运行时…希望这有助于!
GCC没有指定运行路径,因此动态链接程序可以在运行时查找动态链接库。另一种方法是在一些平台上运行,将库的完整路径名硬编码到soname中。 这只能通过修改libstdc ++ / config中的适当的.ml文件(以及libg ++ / config,如果您正在构建libg ++)来完成的,以便$(libdir)/出现在-soname或-h选项中的库名称之前。