Tôi đang viết một ứng dụng mẫu trên MAC OSX 10.6 với gcc phiên bản 4.2. Tôi đang sử dụng gcc phiên bản 4.2 để biên dịch ứng dụng. Nó hoạt động tốt trên cùng một máy, nhưng trên MAC OSX 10.5 (gcc 4.0) thì nó không hoạt động. Làm cách nào tôi có thể biên dịch cái này trên 10.6 để nó cũng chạy trên các máy cũ hơn?
Tôi gặp những lỗi này
dyld: lệnh tải yêu cầu không xác định 0x80000022
Bẫy dấu vết/BPT
Lệnh tôi sử dụng để xây dựng là
gcc -m32 main.cc
Ứng dụng được xây dựng không chính xác trên máy OS X 10.6 dưới dạng máy 10.5. Các nhà phát triển có thể giải quyết vấn đề này bằng cách xem xét ba điều:
Sử dụng các tham số trình biên dịch chính xác:
gcc-4.2 -mmacosx-version-min=10.5 -isysroot /Developer/SDKs/MacOSX10.5.sdk ...
Sử dụng cài đặt trình liên kết chính xác (đặt biến môi trường trước lệnh liên kết). Điều này là bắt buộc để trình liên kết OS X 10.6 sẽ không sử dụng lệnh trình tải 'LC_DYLD_INFO_ONLY' (= 0x80000022), vì OS X 10.5 không hiểu lệnh này:
xuất MACOSX_DEPLOYMENT_TARGET=10,5
(hoặc setenv MACOSX_DEPLOYMENT_TARGET=10.5)
Sau khi khắc phục sự cố này, bạn có thể kiểm tra xem ứng dụng có được xây dựng chính xác cho OS X 10.5 hay không bằng cách chạy "otool":
otool -l tệp nhị phân
Tệp nhị phân chính xác không được chứa bất kỳ lệnh tải "LC_DYLD_INFO_ONLY" nào (chỉ các lệnh "LC_DYLD_INFO").
(Xem thêm bài đăng trên blog của tôi http://grauonline.de/wordpress/?p=71 )
Tôi là một lập trình viên xuất sắc, rất giỏi!