Thư viện không phải lúc nào cũng chứa biểu tượng _mcount, nhưng các ứng dụng thực hiện (bạn có thể xác minh điều này bằng gobjdump hoặc tiện ích nm). Tôi đã đọc _mcount được sử dụng để thực hiện lược tả, nhưng biểu tượng có mặt ngay cả khi lược tả bị tắt và tối ưu hóa được kích hoạt (-O2). Nó có phục vụ một số mục đích bổ sung khác không?Tại sao các ứng dụng được biên soạn bởi GCC luôn chứa ký hiệu _mcount?
Cập nhật: Tôi đang sử dụng Solaris, vì vậy đây là trình liên kết Solaris kết hợp với GCC, tôi không chắc liệu điều đó có tạo nên sự khác biệt hay không. Phiên bản GCC là 4.2.2. Điều này xảy ra ngay cả khi tôi biên dịch một tệp chỉ chứa mã int main() { return 0; }
mà không có thư viện nào được liên kết.
Update2: Tôi gõ:
$ g++ -O2 mytest.cpp
$ nm a.out | grep _mcount
[65] | 134547444| 1|FUNC |GLOB |0 |11 |_mcount
Và g ++ không được lấy bí danh là bất cứ điều gì. Ngoài ra, tôi đã cố gắng biên dịch với trình biên dịch CC mặt trời, và nó không có vấn đề này. Tôi cũng đã thử cập nhật GCC, biểu tượng vẫn tồn tại trong 4.4.1.
Hệ thống của bạn không xảy ra để có 'gcc' (hoặc lệnh bạn đang sử dụng) được đặt biệt danh cho một cái gì đó gọi trình biên dịch với một số công tắc mặc định, phải không? Bạn có thể đăng các cuộc gọi chính xác mà bạn đang sử dụng để biên dịch không? –
Không có bí danh, bài đăng được cập nhật bằng lệnh. –