我刚刚在我的新 ubuntu 12.10 服务器上编译 chironfs 并收到以下错误:
gcc -Wall -W -Wmissing-prototypes -g -O2 -DFUSE_USE_VERSION=25 -D_FILE_OFFSET_BITS=64 -I/usr/local/include -g -O2 -lm -lfuse -o chironfs chironfs.o chiron-conf.o chirondbg.o chironfn.o
chironfs.o: In function `chiron_init':
/root/chironfs-1.1.1/src/chironfs.c:2000: undefined reference to `pthread_create'
chironfs.o: In function `get_rights_by_name':
/root/chironfs-1.1.1/src/chironfs.c:452: undefined reference to `fuse_get_context'
pthread 错误告诉我 -lpthread 丢失,但 fuse 错误有点奇怪,因为正在使用 -lfuse
我在这里找到了一个解决方案,建议将库放在目标文件之后
所以我删除了 -lfuse 并在行尾添加了 -lfuse -lpthread
现在它编译没有错误,似乎这就是它应该的方式:目标文件之后的库
我的问题是:为什么参数顺序与 gcc/ld 相关?我认为 gcc 只是像其他应用程序一样解析参数,并可能将必要的参数转发给 ld 等
一般来说:任何人都知道 gcc 参数排序的事实或技巧,也许还有一些关于为什么需要这种方式的背景信息?
谢谢