Một số đường dẫn (ví dụ: cc1
) được biên dịch. Một số khác (ví dụ: as
) sử dụng tra cứu thông thường trong $ PATH. Điều này có thể khác nhau tùy thuộc vào các tùy chọn GCC được cấu hình với.
Bạn có thể nói khá dễ dàng bằng cách chạy với strace
và grepping cho exec|stat
.
$ strace -f gcc foo.c -o foo |& grep exec
⋮
[pid 24943] execve("/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.6.1/cc1", …
Đó là lời kêu gọi cc1 bởi một con đường tổng hợp-in, như bạn có thể nhìn thấy từ thiếu tìm kiếm nó. Nó cũng không có trong $ PATH.
[pid 24944] execve("/home/anthony/bin/as", ["as", "--64", "-o", "/tmp/ccCIrcGi.o", "/tmp/ccbw3PkL.s"], [/* 51 vars */]) = -1 ENOENT (No such file or directory)
[pid 24944] execve("/usr/local/bin/as", ["as", "--64", "-o", "/tmp/ccCIrcGi.o", "/tmp/ccbw3PkL.s"], [/* 51 vars */]) = -1 ENOENT (No such file or directory)
[pid 24944] execve("/usr/bin/as", ["as", "--64", "-o", "/tmp/ccCIrcGi.o", "/tmp/ccbw3PkL.s"], [/* 51 vars */]) = 0
Đang tìm kiếm as
trong $ PATH. Bạn có thể nói vì nó cố gắng mỗi vị trí trong $ PATH theo thứ tự.
Tôi đã bỏ qua rất nhiều đầu ra strace — ngay cả chỉ với stat và exec, dài một vài trang của nó.
Chạy gcc -v
sẽ hiển thị cho bạn một số đường dẫn được biên dịch (như một phần của dòng cấu hình).
Cảm ơn bạn rất nhiều. Bạn có biết tùy chọn cấu hình nào xác định hành vi cuối cùng không? Có cách nào để hạn chế gcc chỉ sử dụng/my/path/as và my/path/ld không? –
@MichalisVichos: Có lẽ cờ cấu hình '--with-as =/my/path/as' sẽ làm điều đó. Xuất hiện tài liệu cấu hình có sẵn tại http://gcc.gnu.org/install/configure.html (hoặc tất nhiên với './configure --help') – derobert