0
我的版本無法鏈接,可能是因爲它試圖鏈接錯誤版本的libaries(即libssl)。 makefile的LIBS指令指定了-lssl,這個不夠明確:我的系統中有很多這些(各種系統SDK +新下載的版本)。make程序使用哪些庫?
我的一般問題是,是否有一個詳細的選項讓打印用於鏈接的庫的顯式路徑?
Gil。
我的版本無法鏈接,可能是因爲它試圖鏈接錯誤版本的libaries(即libssl)。 makefile的LIBS指令指定了-lssl,這個不夠明確:我的系統中有很多這些(各種系統SDK +新下載的版本)。make程序使用哪些庫?
我的一般問題是,是否有一個詳細的選項讓打印用於鏈接的庫的顯式路徑?
Gil。
要詳細查看鏈接步驟,您通常會將「詳細」選項傳遞給編譯器或鏈接器。你在用什麼系統?如果是gcc,則將-v
添加到編譯命令中。這將產生像
$ gcc -v hello.c
Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --disable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=i386-redhat-linux
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-50)
/usr/libexec/gcc/i386-redhat-linux/4.1.2/cc1 -quiet -v hello.c -quiet -dumpbase hello.c -mtune=generic -auxbase hello -version -o /tmp/ccAtBXVy.s
ignoring nonexistent directory "/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../i386-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/lib/gcc/i386-redhat-linux/4.1.2/include
/usr/include
End of search list.
GNU C version 4.1.2 20080704 (Red Hat 4.1.2-50) (i386-redhat-linux)
compiled by GNU C version 4.1.2 20080704 (Red Hat 4.1.2-50).
GGC heuristics: --param ggc-min-expand=81 --param ggc-min-heapsize=95810
Compiler executable checksum: d8d95095eb3c93dae4bed2137d559f95
as -V -Qy -o /tmp/ccDL1N2O.o /tmp/ccAtBXVy.s
GNU assembler version 2.17.50.0.6-14.el5 (i386-redhat-linux) using BFD version 2.17.50.0.6-14.el5 20061020
/usr/libexec/gcc/i386-redhat-linux/4.1.2/collect2 --eh-frame-hdr -m elf_i386 --hash-style=gnu -dynamic-linker /lib/ld-linux.so.2 /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crt1.o /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crti.o /usr/lib/gcc/i386-redhat-linux/4.1.2/crtbegin.o -L/usr/lib/gcc/i386-redhat-linux/4.1.2 -L/usr/lib/gcc/i386-redhat-linux/4.1.2 -L/usr/lib/gcc/i386-redhat-linux/4.1.2/../../.. /tmp/ccDL1N2O.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/i386-redhat-linux/4.1.2/crtend.o /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crtn.o
哪裏最後一行是鏈接命令的所有榮耀。 -L
選項指定依次搜索-l
給出的庫的目錄。
您的鏈接器命令行指定-lgcc_s,但您在此處放置的輸出不顯示該庫的完整路徑。這正是我所錯過的。 – 2013-05-13 13:52:56
在我的情況下,我確實看到很多-L選項,並且這個庫可能在其中的任何一個。我只想知道鏈接器試圖鏈接哪個鏈接。 – 2013-05-13 21:33:08
按照順序在'-L'目錄中查找第一個。 – Jens 2013-05-14 06:52:37