Chr*_*urm 5 linux linker gcc ld
我在尝试链接目标文件时遇到错误:
$ 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
Run Code Online (Sandbox Code Playgroud)
但是,库似乎在那里(实际上,我通过/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
Run Code Online (Sandbox Code Playgroud)
为什么链接失败以及如何使链接器使用这些共享对象?
GCC 不指定运行路径,以便动态链接器可以在运行时找到动态库...在一些平台上工作的另一个选项是将库的完整路径名硬编码到其 soname 中。这只能通过修改 libstdc++/config(以及 libg++/config,如果您正在构建 libg++)中相应的 .ml 文件来实现,以便 $(libdir)/ 出现在 -soname 或 -h 选项中的库名称之前。
http://gcc.gnu.org/faq.html#rpath