Lỗi trình liên kết Xcode: tệp quá nhỏ cho kiến ​​trúc x86_64


88

Tôi đang phát triển một ứng dụng trong Xcode.

Khi tôi cố gắng xây dựng, lỗi này xuất hiện:

ld: in /Users/theodore/Library/Developer/Xcode/DerivedData/Tower-bkpdifuqssebjdgurzmtirbxejnn/Build/Intermediates/Tower.build/Debug/Tower.build/Objects-normal/x86_64/TWRAppDelegate.o, file too small for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Có ai biết có chuyện gì không?


59
Hãy thử xây dựng lại toàn bộ / làm sạch. Có thể bản dựng trước đó đã bị hủy bất thường, khiến TWRAppDelegate.otệp bị hỏng hoặc có kích thước bằng không.
Martin Baulig 25/12/12

5
Chính xác một chút: bạn làm điều đó với cmd + shift + k, nếu điều đó không hiệu quả, hãy vào thư mục dữ liệu dẫn xuất và xóa thư mục có tên là dự án của bạn.
Ramy Al Zuhouri

3
@RamyAlZuhouri: Không cần phải tự mình chuyển các thư mục xây dựng vào Thùng rác nữa. Nhấn giữ Option và lệnh Clean (nằm trong menu Sản phẩm) sẽ chuyển thành “Clean Build Folder…”, sẽ thực hiện điều đó cho bạn.
Peter Hosey

Đề xuất của Martin Baulig đã giải quyết được vấn đề của tôi. Cảm ơn!
tbodt

2
@PeterK. Nó giúp tôi kiếm được huy hiệu bạc Nice Question :-)
tbodt

Câu trả lời:


188

Ăn cắp câu trả lời của @ martin-baulig:

Hãy thử xây dựng lại toàn bộ / làm sạch. Có thể bản dựng trước đó đã bị hủy bỏ bất thường, khiến tệp TWRAppDelegate.o bị hỏng hoặc có kích thước bằng không.


7
Cuối cùng! Bạn xứng đáng với nó.
tbodt

Cảm ơn! :-) Chà, câu trả lời của @ martin-bailig trong phần bình luận đã giúp ích cho tôi, nhưng tốt hơn là nên có nó ở đây như một câu trả lời thực sự.
Peter K.

2
Dự án của tôi mất một thời gian để xây dựng. Bạn có thể thoát khỏi việc chỉ xóa các tệp đối tượng 1-4 bị hỏng nếu bạn dừng quá trình xây dựng một cách bất thường thay vì mọi thứ.
Fernando Mazzon

20

Tôi thường thêm một khoảng trắng (có thể là bất kỳ ký tự nào cho vấn đề đó) vào tệp được đề cập, xóa nó và sau đó lưu. Dễ dàng và nhanh chóng hơn một bản dựng sạch.


2
Câu trả lời của bạn giúp tôi tiết kiệm 10 phút xây dựng lại dự án! Cảm ơn
Accid Bright

8

Để tự động khắc phục sự cố này Build Script Phasecó thể được thêm vào. Goto Xcode -> Dự án của bạn -> Mục tiêu của bạn -> Giai đoạn xây dựng -> + -> Giai đoạn chạy kịch bản mới

Đổi tên nó thành Xcode Link Fixvà di chuyển nó ở trên Compile Sourcespha. Dán cái này vào nội dung tập lệnh:

# Legacy build system
legacy_dir=`dirname "${LD_DEPENDENCY_INFO_FILE}"`
if [ -d "${legacy_dir}" ]; then
    find "${legacy_dir}" -size 0 | while read -d $'\n' file; do
        rm "$file"
    done
fi

# New build system
if [ -d "${OBJECT_FILE_DIR_normal}" ]; then
    find "${OBJECT_FILE_DIR_normal}" -size 0 | while read -d $'\n' file; do
        rm "$file"
    done
fi

Tập lệnh này kiểm tra các tệp đối tượng có kích thước bằng không và loại bỏ chúng để khi biên dịch được thực hiện ở bước tiếp theo, nó sẽ thành công.

Bạn cần thêm tập lệnh này cho mọi mục tiêu ứng dụng nếu bạn có nhiều.

Tập lệnh này mất ~ 0,1 giây để chạy và giúp bạn tiết kiệm từ việc xây dựng lại toàn bộ dự án.


Thật tuyệt vời! Cần phải có trong mọi dự án.
Nik Kov


5

chỉ cần xóa tệp này bằng cách chạy cmd trong ứng dụng đầu cuối của bạn:

rm /Users/theodore/Library/Developer/Xcode/DerivedData/Tower-bkpdifuqssebjdgurzmtirbxejnn/Build/Intermediates/Tower.build/Debug/Tower.build/Objects-normal/x86_64/TWRAppDelegate.o


1
Tôi đã giải quyết nó theo cùng một cách, nhanh hơn nhiều so với một bản dựng / dọn dẹp hoàn toàn trên dự án lớn của tôi. Lần tới, tôi sẽ thử giải pháp của @Anton Plebanovich, đó có thể là một cách tuyệt vời để tự động hóa việc sửa chữa này.
Romano

2

Cách nhanh chóng để khắc phục lỗi không có bộ nhớ cache hoàn toàn sạch:

  1. Mở tệp được mô tả do lỗi (trong trường hợp của câu hỏi này TWRAppDelegate)
  2. cmd + A
  3. cmd + X
  4. Xây dựng lại - thất bại
  5. cmd + V
  6. Xây dựng lại - thành công

1

Vì việc xây dựng một dự án sạch có thể mất quá nhiều thời gian nên có cách ngắn hơn cho những người có quyền truy cập vào tệp bị hỏng trong bộ nhớ cache:

  • Xóa tệp (Xóa tham chiếu)
  • Xây dựng dự án
  • Chèn lại tệp
  • Xây dựng dự án

Phiên bản đầy đủ để bạn không gặp khó khăn khi tìm tệp:

  • Tìm tệp trong trình điều hướng dự án Xcode
  • Nhấp chuột phải vào tệp và nhấn "hiển thị trong công cụ tìm" (mở công cụ tìm tại vị trí của tệp)
  • Chọn tệp trong Xcode và nhấn phím xóa lùi sau đó nhấp vào "Xóa tham chiếu"
  • Xây dựng dự án (nó sẽ thất bại nhưng hãy đợi nó kết thúc)
  • Chèn lại tệp bằng cách kéo nó từ công cụ tìm vào cùng một vị trí mà bạn vừa xóa nó
  • Xây dựng dự án (sẽ hoạt động ngay bây giờ)

1

Bạn chỉ có thể xóa tệp TWRAppDelegate.o và tiếp tục quá trình xây dựng của mình. Sao chép đường dẫn đầy đủ được đề cập trong thông báo lỗi và dán vào sau lệnh 'rm' trong thiết bị đầu cuối của bạn. Không cần phải dọn dẹp / xây dựng lại, xóa dữ liệu có nguồn gốc, thêm / xóa tệp khỏi dự án, v.v.


-1

Bước 1. Đi tới: Dự án> Cài đặt bản dựng> Đường dẫn tìm kiếm

Bước 2. Đặt "Luôn tìm kiếm đường dẫn người dùng" thành Có

Bước 3. Xây dựng dự án (Bạn sẽ nhận được cảnh báo nhưng dự án sẽ xây dựng.)

Bước 4. Đặt "Luôn tìm kiếm đường dẫn người dùng" trở lại Không và xây dựng lại để loại bỏ cảnh báo


Chỉ có thể thêm điều này cho những người khác tìm thấy câu trả lời này. "Luôn luôn tìm kiếm đường dẫn người dùng" đã không được chấp nhận kể từ Xcode 8.3 và từ tài liệu, nó cũng cho biết "Vô hiệu hóa nó được thực sự khuyến khích." (Tức là đặt nó thành KHÔNG)
Groot

-1

Trong trường hợp của tôi, việc xây dựng lại sạch sẽ không xảy ra, vì vậy tôi giải thích cách tôi giải quyết vấn đề:
- Đã xóa tham chiếu đến tệp (không xóa tệp)
- Thêm lại tệp vào dự án và chạy


Một cuộc bỏ phiếu tiêu cực yêu cầu một lời giải thích, nó hiệu quả với tôi và nó có thể hiệu quả với bất kỳ ai khác
David Santiago
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.