我安装了这两个库:过剩和卷曲。
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”对应一条路径,我怎么才能找到?
答案 0 :(得分:2)
它会检查/lib
,/usr/lib
以及传递给-L
的所有路径。
答案 1 :(得分:1)
链接器将查找-L
选项指定的目录以及标准系统目录,通常为/lib
和/usr/lib
。虽然您没有使用任何-L
选项,但GCC通常会将一些选项传递给链接器,因此它可以找到GCC自己的库(例如C ++标准库),除非您使用-nostdlib
。 GCC还将为-L
环境变量的内容添加LIBRARY_PATH
个选项。
要查看GCC传递给链接器的选项,您可以使用-v
进行编译(详细信息)并查看链接器使用哪些库,您可以将-Wl,--trace
传递给GCC,这会导致它通过{ {1}}到链接器,它使输出类似于:
--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
库找到的库。 libs位于该路径中,因为在我的系统上,GCC将lcurl
传递给链接器(通过编译-L/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64
显示)
您可以使用-v
readlink
答案 2 :(得分:0)
http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html 它只是将字符串转换为文件名,然后检查它的正常位置。
答案 3 :(得分:0)
尝试
ldd /path/to/your/executable