基于此:https://stackoverflow.com/questions/5925678/location-of-c-standard-library
gcc --打印文件名=libm.a
返回:
/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libm.a
但是我找不到它。在当前目录(/usr/lib/gcc/x86_64-linux-gnu/9)中:我执行ls
命令,返回以下内容:
cc1 crtfastmath.o finclude libcaf_single.a libgfortran.spec liblsan.so libobjc_gc.so libsupc++.a
cc1plus crtoffloadbegin.o include libcc1.so libgomp.a liblsan_preinit.o libquadmath.a libtsan.a
collect2 crtoffloadend.o libasan.a libgcc.a libgomp.so liblto_plugin.so libquadmath.so libtsan.so
crtbegin.o crtoffloadtable.o libasan.so libgcc_eh.a libgomp.spec liblto_plugin.so.0 libsanitizer.spec libubsan.a
crtbeginS.o crtprec32.o libasan_preinit.o libgcc_s.so libitm.a liblto_plugin.so.0.0.0 libssp_nonshared.a libubsan.so
crtbeginT.o crtprec64.o libatomic.a libgcov.a libitm.so libobjc.a libstdc++.a lto-wrapper
crtend.o crtprec80.o libatomic.so libgfortran.a libitm.spec libobjc.so libstdc++.so lto1
crtendS.o f951 libbacktrace.a libgfortran.so liblsan.a libobjc_gc.a libstdc++fs.a plugin
仅有的f包括,包括,插入是目录。我已经检查过 libm.a 不存在。
为什么要麻烦,因为基于此链接。(https://www.linuxtopia.org/online_books/an_introduction_to_gcc/gccintro_17.html)如果我找到正确的 libm.a 完整路径,我应该能够执行以下命令。
gcc -Wall calc.c /usr/lib/libm.a -o calc
但是以下命令仍然有效。
gcc -Wall calc.c -lm -o calc
答案1
/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libm.a
gcc 给您提供的文件名中的“../”表示您转到父目录。
/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libm.a
= /usr/lib/gcc/x86_64-linux-gnu/../../x86_64-linux-gnu/libm.a
= /usr/lib/gcc/../x86_64-linux-gnu/libm.a
= /usr/lib/x86_64-linux-gnu/libm.a
所以,libm 实际上位于/usr/lib/x86_64-linux-gnu/libm.a
.