C++ Linux-查找g++;解放党
我安装了这两个库:glut和curlC++ Linux-查找g++;解放党,c++,linux,path,linker,g++,C++,Linux,Path,Linker,G++,我安装了这两个库:glut和curl sudo apt-get install libcurl4-gnutls-dev sudo apt-get install freeglut3-dev 当我必须编译一个程序时,我使用: g++ -o executable file11.cpp file2.cpp -lglut -lcurl 而且它有效 我如何知道链接器在哪里搜索“-lglut”或“-lcurl” “-lsomething”对应一条路径,我如何才能找到 它检查/lib,/usr/lib,以
sudo apt-get install libcurl4-gnutls-dev
sudo apt-get install freeglut3-dev
当我必须编译一个程序时,我使用:
g++ -o executable file11.cpp file2.cpp -lglut -lcurl
而且它有效
我如何知道链接器在哪里搜索“-lglut”或“-lcurl”
“-lsomething”对应一条路径,我如何才能找到 它检查
/lib
,/usr/lib
,以及传递给-L
的任何路径它检查/lib
,/usr/lib
,以及传递给-L
的任何路径
它只是将字符串转换为文件名,并检查其正常位置。
它只是将字符串转换为文件名,并检查其正常位置。试试看
ldd /path/to/your/executable
试一试
链接器将在
-L
选项指定的目录和标准系统目录中查找,这些目录通常是/lib
和/usr/lib
。虽然您没有使用任何<代码> -L/COD>选项,但GCC通常会传递一些链接到链接器,这样它就可以找到GCC自己的库(例如C++标准库),除非您使用<代码> -NoSTDLIB < /C>。GCC还将为库路径
环境变量的内容添加-L
选项
要查看GCC传递给链接器的选项,您可以使用-v
(详细信息)进行编译;要查看链接器使用的库,您可以将-Wl,--trace
传递给GCC,这会使它将--trace
传递给链接器,从而使其输出类似于:
/usr/bin/ld: mode elf_x86_64
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/crt1.o
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/crti.o
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/crtbegin.o
/tmp/ccJHrbSx.o
-lglut (/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/libglut.so)
-lcurl (/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/libcurl.so)
-lgcc_s (/usr/lib/gcc/x86_64-redhat-linux/4.7.2/libgcc_s.so)
/lib64/libc.so.6
(/usr/lib64/libc_nonshared.a)elf-init.oS
/lib64/ld-linux-x86-64.so.2
-lgcc_s (/usr/lib/gcc/x86_64-redhat-linux/4.7.2/libgcc_s.so)
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/crtend.o
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/crtn.o
这显示了在我的系统上为-lglut
和lcurl
libs找到的库。lib位于该路径中,因为在我的系统上,GCC将-L/usr/lib/GCC/x86_64-redhat-linux/4.7.2/../../../../../../../../../lib64
传递给链接器(通过使用-v
编译显示)
您可以使用readlink
$ readlink -f /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/
/usr/lib64/
链接器将在
-L
选项指定的目录和标准系统目录中查找,这些目录通常是/lib
和/usr/lib
。虽然您没有使用任何<代码> -L/COD>选项,但GCC通常会传递一些链接到链接器,这样它就可以找到GCC自己的库(例如C++标准库),除非您使用<代码> -NoSTDLIB < /C>。GCC还将为库路径
环境变量的内容添加-L
选项
要查看GCC传递给链接器的选项,您可以使用-v
(详细信息)进行编译;要查看链接器使用的库,您可以将-Wl,--trace
传递给GCC,这会使它将--trace
传递给链接器,从而使其输出类似于:
/usr/bin/ld: mode elf_x86_64
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/crt1.o
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/crti.o
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/crtbegin.o
/tmp/ccJHrbSx.o
-lglut (/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/libglut.so)
-lcurl (/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/libcurl.so)
-lgcc_s (/usr/lib/gcc/x86_64-redhat-linux/4.7.2/libgcc_s.so)
/lib64/libc.so.6
(/usr/lib64/libc_nonshared.a)elf-init.oS
/lib64/ld-linux-x86-64.so.2
-lgcc_s (/usr/lib/gcc/x86_64-redhat-linux/4.7.2/libgcc_s.so)
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/crtend.o
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/crtn.o
这显示了在我的系统上为-lglut
和lcurl
libs找到的库。lib位于该路径中,因为在我的系统上,GCC将-L/usr/lib/GCC/x86_64-redhat-linux/4.7.2/../../../../../../../../../lib64
传递给链接器(通过使用-v
编译显示)
您可以使用readlink
$ readlink -f /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/
/usr/lib64/
这将告诉您运行时链接器在何处找到所需的库,这不一定与在链接处找到它们的位置相同-time@JonathanWakely看这篇文章,似乎(1)没有向链接器传递指示库位置的标志,以及(2)编译后的程序正在同一系统上执行,但未指定
LD\u LIBRARY\u PATH
。在这种情况下,ldd
将产生与编译使用的lib几乎相同的lib集,但不一定。链接时$LD\u RUN\u PATH
的内容和运行时LD.so.conf
的内容也会影响它。因此,尽管ldd可能很有用,但它并不总是显示与链接时找到的libs相同的内容。正如我所说的,它不一定是相同的。或者更准确地说,它受运行时动态链接器缓存的内容的影响,这受上次重建缓存时/etc/ld.so.conf
的内容的影响。这告诉您运行时链接器在哪里找到所需的库,这不一定和他们在林克找到的地方一样-time@JonathanWakely看这篇文章,似乎(1)没有向链接器传递指示库位置的标志,(2)编译的程序在同一系统上执行,没有指定LD\u LIBRARY\u PATH
。在这种情况下,ldd
将产生与编译使用的lib几乎相同的lib集,但不一定。链接时$LD\u RUN\u PATH
的内容和运行时LD.so.conf
的内容也会影响它。因此,尽管ldd可能很有用,但它并不总是显示与链接时找到的libs相同的内容。正如我所说的,它不一定相同。或者更准确地说,它受运行时动态链接器缓存的内容的影响,而动态链接器缓存受上次重建缓存时/etc/ld.so.conf
的内容的影响。