Đảm bảo -include your_header.h
Đây là cách tôi biên dịch trước và sử dụng bits/stdc++.h
bộ sưu tập.
Mã
#include <bits/stdc++.h>
Sau đó, tôi xác định vị trí lib bằng cách biên dịch tệp của tôi với -H và xem đầu ra
g++ sol.cpp -H -O3 -pthread -lm -std=c++14 -o executable
nơi tôi đã thấy
. /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h
Vì vậy, tôi đã tạo một thư mục mới bits
bên trong thư mục hiện tại và sao chép stdc++.h
từ đó.
Sau đó tôi chạy
g++ bits/stdc++.h -O3 -std=c++14 -pthread
cái nào tạo ra bits/stdc++.gch
Thông thường, tôi đã biên dịch mã của mình qua
g++ sol.cpp -O3 -pthread -lm -std=c++14 -o executable
, nhưng tôi đã phải sửa đổi điều đó thành
g++ sol.cpp -include bits/stdc++.h -O3 -pthread -lm -std=c++14 -o executable
vì nó chỉ được giải quyết với .gch
tệp thay vì .h
với -include bits/stdc++.h
Đó là chìa khóa cho tôi. Một điều khác cần lưu ý là bạn phải biên dịch *.h
tệp tiêu đề với các tham số gần giống như khi bạn biên dịch *.cpp
. Khi tôi không bao gồm -O3
hoặc -pthread
nó bỏ qua *.gch
tiêu đề được biên dịch trước.
Để kiểm tra xem mọi thứ có chính xác hay không, bạn có thể đo chênh lệch thời gian thông qua so sánh kết quả của
time g++ sol.cpp ...
hoặc chạy
g++ sol.cpp -H -O3 -pthread -lm -std=c++14 -o executable
một lần nữa và tìm kiếm các đường dẫn tiêu đề và nếu bây giờ bạn nhận được !
trước đường dẫn thư viện, chẳng hạn
! ./bits/stdc++.h.gch
....