기준: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
.