才疏学浅,对C了解不多。Linux下尝试写一个密码校验模块时,编译出错。查了半天跟gcc链接选项位置有关,记录一下。
最初编译过程,报错:
gcc -lcrypt chkpwd.c -o chkpwd
/usr/bin/ld: /tmp/ccVl9cer.o: in function `main':
chkpwd.c:(.text+0x7d): undefined reference to `crypt'
collect2: error: ld returned 1 exit status
make: *** [<内置>:chkpwd] 错误 1
后来无意间执行成功了:
gcc chkpwd.c -o chkpwd -lcrypt
只是-l放置位置不同,前者报错,后者通过。
从StackOverflow以及gcc man手册查到原因:
-l library
Search the library named library when linking. (The second alternative with the library as a separate argument is only for
POSIX compliance and is not recommended.)The -l option is passed directly to the linker by GCC. Refer to your linker documentation for exact details. The general
description below applies to the GNU linker.