0

我安装了这两个库: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”对应一个路径,我怎样才能找到?

4

4 回答 4

2

它检查/lib,/usr/lib和任何传递给 的路径-L

于 2013-05-17T13:00:04.173 回答
1

链接器将在-L选项指定的目录和标准系统目录中查找,通常是/lib/usr/lib。尽管您没有使用任何-L选项,但 GCC 通常会将一些选项传递给链接器,以便它可以找到 GCC 自己的库(例如 C++ 标准库),除非您使用-nostdlib. GCC 还将为环境变量-L的内容添加选项。LIBRARY_PATH

要查看 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这显示了在我的系统上为和lcurllibs找到的库。在该路径中找到了库,因为在我的系统上,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/
于 2013-05-18T11:38:28.627 回答
0

http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html 它只是将字符串转换为文件名,并检查它的正常位置,似乎。

于 2013-05-17T13:07:47.570 回答
0

尝试

ldd /path/to/your/executable
于 2013-05-17T13:28:58.273 回答