Lệnh liên kết không thành công với mã thoát 1 (sử dụng -v để xem lệnh gọi), Xcode 8, Swift 3


114

Tôi không thể thoát khỏi lỗi này!

Tôi đã thử tất cả các loại như xóa Dữ liệu gốc (Tùy chọn-> Vị trí-> nhấp vào mũi tên màu xám để mở thư mục Dữ liệu gốc trong Finder-> nhấp chuột phải, chuyển vào thùng rác), dọn dẹp dự án (CMD + Shift + K hoặc Sản phẩm -> Clean), cập nhật carthage và các phụ thuộc, kiểm tra các câu trả lời khác trên StackOverflow (chủ yếu là các điều chỉnh trong Cài đặt / Giai đoạn xây dựng) và mở lại ứng dụng từ github, v.v.

Dự án tương tự hoạt động trên máy tính cộng tác viên của tôi ..

CHỈNH SỬA: Từ câu trả lời được xếp hạng cao nhất hiện tại, tôi đã có thể gỡ lỗi thêm một chút ... Mặc dù vậy, tôi vẫn không chắc chắn về cách khắc phục. Có vẻ như tôi có một cái gì đó trong dự án hai lần? Tôi đã nhìn và không thể tìm thấy bất cứ điều gì hiển thị hai lần!

Đây là hình ảnh của nhật ký:



tại sao bạn chấp nhận câu trả lời được xếp hạng cao nhất nếu nó không giải quyết được vấn đề của bạn ...?
benomatis

Câu trả lời:


160

hôm nay tôi gặp phải vấn đề tương tự trong xcode 8 phiên bản 8.3.2

nhấp chuột phải vào vấn đề -> tiết lộ trong nhật ký

nhập mô tả hình ảnh ở đây

thì bạn có thể kiểm tra điều gì đang gây ra vấn đề đó

nhập mô tả hình ảnh ở đây


Cảm ơn vì điều đó! Đây là những gì tôi nhận được trong nhật ký: imgur.com/vFkNJzZ
Jake Dobson

Cuối cùng tôi đã giải quyết được điều này. Bạn đã giúp dẫn tôi đi đúng hướng! Nó thực sự hấp dẫn khi Xcode không tiết lộ nhật ký khi nhấp vào ... Có thể đã tiết kiệm cho tôi một chút thời gian!
Jake Dobson

Cảm ơn vì mẹo Tiết lộ trong Nhật ký. Tôi không biết tôi có thể sử dụng nó
KarenAnne

1
@GhasemTabatabaei Kiểm tra câu trả lời của tôi bên dưới
Jake Dobson

81
Tại sao đây là câu trả lời được chấp nhận? Nó không thực sự trả lời câu hỏi, chỉ có khả năng hỗ trợ trong việc đạt được giải pháp.
Tom Oakley

116

Có thể bạn đã cài đặt một tệp pod và bạn vẫn đang cố gắng tạo từ .xcodeprojtệp đó thay vì.xcworkspace


4
Không, tôi sử dụng Carthage vì lý do đó. Tuy nhiên, đó là một câu trả lời hợp pháp có thể giúp những người khác mắc cùng lỗi này!
Jake Dobson

1
Tôi đã thêm mã m $ AppCenter vào một dự án hiện có và nó cần Pod. Không biết chuyện gì đang xảy ra và đã làm nó .xcodeprojtrong hơn một năm qua .. Một cái gì đó đơn giản thế này!
Dennis Smolek

1
Bản sửa lỗi của tôi phần nào liên quan đến điều này. Gần đây tôi đã nâng cấp một số phụ thuộc và dự án hiện đã sử dụng CocoaPods. Trước đây tôi luôn làm việc từ tệp dự án. Tôi đã mở tệp không gian làm việc, có cả dự án của tôi và Pods trong đó, và mọi thứ đều hoạt động tốt.
Rozgonyi

40

điều duy nhất hiệu quả với tôi là chạy pod deintegratepod install


Câu hỏi đã được trả lời. Nếu bạn thấy bình luận của tôi bên dưới, tôi đã nhập một tệp đã được nhập vào tệp đó. Dự án đang trong tình trạng chạy đua cố gắng tham chiếu tệp hai lần.
Jake Dobson

ok yeah nó không hoạt động với tôi và khi tôi googled nó là những gì đã xuất hiện, vì vậy tôi nghĩ id hãy thử và giúp ai đó khác ... tôi mới làm quen với điều này, tôi có nên xóa câu trả lời của mình không?
Charles Harring

Tôi đoán là không vì nó đã ở đó. Tôi chắc rằng ai đó có thể thấy nó hữu ích. Ứng dụng tôi đang sử dụng không sử dụng cocoapods. Vấn đề là, lỗi này rất phổ biến và cung cấp ít thông tin về chính nó. Vì vậy, nhiều giải pháp có thể được tìm thấy, tùy thuộc vào từng dự án.
Jake Dobson

Nó tiết kiệm ngày của tôi! Chúa phù hộ bạn!
user2612604

19

bạn đã thử sạch chưa? cmd + shift + k


8
Oh yeah..nhiều lần!
Jake Dobson

Đó thực sự là tất cả những gì tôi nhận được ... Nhấp vào văn bản không gửi cho tôi bất kỳ thông tin bổ sung nào hoặc vị trí của tệp nơi nó xảy ra giống như nó xảy ra đối với hầu hết các lỗi. Không có gì trong bảng điều khiển, nó không bao giờ chạy ứng dụng vì lỗi này ..
Jake Dobson

FWIW, tôi đã gặp sự cố này gần đây khi xây dựng bằng SDK và đề xuất của @ FranciscoPerez đã giải quyết được vấn đề này. Chắc chắn đề xuất nó như một bước đầu tiên trước khi bạn đi quá sâu vào gỡ lỗi.
riastrad

9

Được rồi ... Vì vậy, đây là những gì đã giải quyết vấn đề của tôi ...

trong Tệp đại diện ứng dụng:

#import "AppDelegate.h"
#import "DarkSkyAPI.h"
//#import "Credentials.h"

Tôi đã nhập Credentials.h trong tệp DarkSkyAPI.m trong dự án của mình. Nhận xét về việc nhập thêm đã làm cho lỗi biến mất!

Một số điều cần đề cập và có thể giúp đỡ bất kỳ ai trong tương lai. Câu trả lời của @ umairqureshi_6 đã giúp tôi trong quá trình này, nhưng không giải quyết được nó. Anh ấy đã dẫn đến nơi tôi có thể tìm hiểu thông tin. Tôi tiếp tục thấy các tệp AppDelegate và DarkSkyAPI hiển thị trong nhật ký lỗi và thông tin nó đang lấy từ tệp Thông tin xác thực đang gây ra lỗi. Tôi biết nó phải nằm trong một trong 3 tệp này, vì vậy tôi ngay lập tức kiểm tra nhập, vì tôi nhớ rằng .h mang tất cả các mục nhập từ tệp .m của nó. Bùm!


6

Tôi k bây giờ câu hỏi đã được trả lời. Nhưng nếu điều này giúp ai đó tiết kiệm thời gian: Tôi đã gặp lỗi tương tự. Tôi đã kiểm tra mọi thứ để tìm ra một lỗi rất nhỏ và ngu ngốc từ phía mình. Tôi đã nhập tệp tùy chỉnh ManagedObject dữ liệu cốt lõi trong bộ điều khiển chế độ xem của dự án của mình. Tôi đã vô tình nhập tệp .m thay vì tệp .h gây ra biểu tượng trùng lặp trong lỗi kiến ​​trúc (lệnh trình liên kết không thành công) vì tệp .m của lớp thuộc tính của tôi nhập tệp .h của lớp dữ liệu cốt lõi và do đó gây ra nhập trùng lặp.

Vì vậy, chỉ cần kiểm tra xem bạn đã nhập đúng tệp chưa trước khi thử nhiều giải pháp.!


Đúng! Điều này rất giống với vấn đề của tôi. Tôi đã nhập cùng một tệp hai lần trong dự án của mình. Thay vào đó, tôi đã nhập "tệpA.h" vào "tệpB.h", nhưng sau đó nhập "tệpA.h" và "tệpB.h" vào "tệpC.h" hoặc một cái gì đó dọc theo những dòng đó ... Vì vậy, ứng dụng bị treo bởi vì nó không biết sử dụng cái nào. Chắc chắn là một nơi tốt để có lời nhắc cho những người khác kiểm tra kỹ việc nhập tệp của họ!
Jake Dobson

6

Rất nhiều giải pháp được đề cập ở trên. Không ai làm việc cho tôi (nhưng hãy thử ở trên trước).

Chọn Dự án -> Chọn Mục tiêu -> Khung và Thư viện được Liên kết -> Thêm tất cả các thư viện nhóm. (xóa nếu chúng tồn tại trong các tệp nhị phân được nhúng)

Bây giờ hãy xóa chúng khỏi Thư mục Khung trong trình khám phá tệp bên trái của xcode.

Điều này đã giải quyết vấn đề của tôi.


4

Chọn dự án-> Giai đoạn xây dựng-> Liên kết nhị phân với các thư viện và thêm tất cả các thư viện nhóm.


3

Tôi đã gặp vấn đề tương tự khi sử dụng Carthage cho các phụ thuộc.

Chỉ cần vào Chọn Dự án -> Cài đặt Xây dựng -> Tìm kiếm Bật Bitcode -> Nếu nó được chọn là Có, hãy chọn Không.

Điều đó đã giải quyết vấn đề này cho tôi.


2

Tôi đã có cùng một vấn đề.

Nguyên nhân là tôi đã khai báo cùng một biến toàn cục trong 2 tệp . Vì vậy, nó đã hiển thị cùng một lỗi nói 2 biểu tượng trùng lặp .

Giải pháp là loại bỏ các biến đó.


1
tại sao bạn lại loại bỏ cả hai mà không chỉ một?
Jake Dobson

2

Đối với bất kỳ ai gặp vấn đề này với Flurry framework. Đây là những gì đã khắc phục sự cố của tôi. Đối với tôi, vấn đề là tôi đã nhập các tệp sau nhưng chưa bao giờ sử dụng chúng. "libFlurryTVOS_9.2.3" "libFlurryWatch_9.2.3"

Vì vậy, tất cả những gì tôi phải làm là vào cài đặt mục tiêu dự án và xóa 2 tệp này khỏi phần "Khung và thư viện được liên kết" và vấn đề đã được giải quyết.


2

Trong trường hợp của tôi, lý do của lỗi là thư viện được liên kết hai lần.

Tôi sử dụng react-nativevì vậy nó đã được liên kết tự động bằng cách sử dụng react-native linkvà theo cách thủ công trong xcode.


2

Đảm bảo rằng Find Implicit Dependencieshộp kiểm đã được chọn.

(Sản phẩm -> Lược đồ -> Chỉnh sửa Lược đồ -> Xây dựng -> Tìm Phụ thuộc Ngầm định)


2

Tôi đang thử nghiệm khung Sparkle với CocoaPods.

Đáng buồn là tôi đã đặt pod 'Sparkle', '~> 1.21'PodFile không đúng chỗ. Tôi đặt nó bên dưới Kiểm tra (đối với các bài kiểm tra đơn vị).

Sau khi được đặt đúng vị trí trong PodFile, mọi thứ đều ổn.


1

Tôi chỉ cần phải làm import Foundation!

Tôi đang sử dụng Kitura cho phía máy chủ Swift và liên tục quên điều này!


Ha. Vâng, bạn sẽ luôn cần ít nhất nhập Foundation trước khi bạn làm bất cứ điều gì! Tôi thường nhập UIKit thay vì Foundation, vì hầu như luôn luôn tôi sẽ cần sử dụng các tính năng của UIKit và UIKit đã kế thừa mọi thứ từ Foundation cho bạn. Việc nhập với Objc có thể khá phức tạp, nhưng có vẻ như bạn đang sử dụng Swift?
Jake Dobson

Có, tôi đang sử dụng Swift, tệp trong tay không hiển thị bất kỳ sự cố trình biên dịch nào, nhưng chỉ trong khi chạy tệp, tôi đã gặp sự cố này!
Mật ong,

1
Vâng, tôi không nghĩ rằng nó thực sự kiểm tra điều đó cho đến thời gian chạy, tôi có thể đã sai. Tuy nhiên, có vẻ như nó sẽ không có vấn đề gì cho đến khi bạn đang cố gắng truy cập một thứ gì đó từ Foundation, không thể tìm thấy mục nhập, sau đó không thể tiếp tục quá trình - crash!
Jake Dobson

1

Đây là vấn đề và giải pháp của tôi:

Tôi đã xóa hai tệp khỏi mã nguồn bằng cách sử dụng cây nguồn (Bộ điều khiển phiên bản). Sau khi áp dụng sự khác biệt, có chứa hai lớp tôi đã xóa, Xcode đã không tự động thêm nó. Vì vậy, tôi đã gặp lỗi trình liên kết.

Tôi đã thêm các tệp theo cách thủ công, bằng cách nhấp chuột phải vào tên nhóm và chọn "Thêm tệp vào". Bây giờ lỗi của tôi đã được giải quyết.

Nếu bất kỳ ai gặp phải lỗi trình liên kết liên quan đến tệp lớp, hãy thử thêm nó theo cách thủ công.


1
Nó chắc chắn có vẻ như một vấn đề tệp mà họ đang cố gắng gợi ý ... Các tệp ở nơi khác không truy xuất thông tin từ nhau dường như thường thấy trên trang này. Cảm ơn vì đã trả lời. Hy vọng nó sẽ giúp một ai đó trên đường!
Jake Dobson

1

Không gặp sự cố này khi tôi xây dựng và chạy trên thiết bị của riêng mình. Chỉ có vấn đề này với trình mô phỏng. Tôi chỉ cần khởi động lại máy tính của mình và chạy nó. Nó đã làm việc.


1

Trong trường hợp của tôi, tôi đã thay đổi Targettên trong của mình PodfileVì vậy, nó tạo ra cùng một Lỗi cho tôi.

Giải pháp

Chỉ cần đi tới project-> Build Phase->Link Binary with librariesXóa cũ FrameWorksbằng cách nhấp vào minus button(-)Và làm sạch và Chạy lại. Đó là công việc của tôi.

nhập mô tả hình ảnh ở đây

Loại bỏ Không mong muốn .framework.


1

Các câu trả lời khác không phù hợp với tôi vì vậy ở đây tôi chia sẻ giải pháp của mình trong trường hợp nó có thể giúp ích cho người khác:

Vấn đề của tôi là tôi đã định cấu hình Podfile của XCode-Project cho nền tảng sai. Thay đổi "platform: ios" ở đầu Podfile của tôi thành "platform: macos" đã giúp tôi loại bỏ lỗi này.


0

Tôi đã từng gặp vấn đề tương tự. Nếu bạn đang kiểm tra bất kỳ dự án github nào, thì thay vì sử dụng git clone, hãy sử dụng git lfs clone, vì đôi khi, một số tệp lớn không được sao chép đúng cách bằng cách chỉ sử dụng git. Ngoài ra, hãy đảm bảo rằng mã bit của bạn bị vô hiệu hóa.


lưu ý tốt..nhưng thường bảng điều khiển sẽ cho bạn biết rằng một số tệp quá lớn để được chuyển?
Jake Dobson

0

Đối với tôi, tệp khóa đá quý chỉ định một phiên bản cocoapods cũ hơn phiên bản tôi đã cài đặt. Tôi phải phân nhánh lại và chạy bundle exec pod installthay vìpod install


0

Có vẻ như vấn đề là khác nhau đối với hầu hết chúng ta và thông báo lỗi có thông tin phù hợp. Trong trường hợp của tôi, Mục tiêu Triển khai được đặt 10.13theo export MACOSX_DEPLOYMENT_TARGET=10.13dòng, nhưng tôi đang chạy 10.14. Vì vậy, tôi đã phải chuyển Mục tiêu triển khai của mình thành 10.14trong Chung> Thông tin triển khai, để các biểu tượng liên quan đến ITLibrary có sẵn trở lại.

cd /Users/foo/src/scrobble/macos/itunes-scrobble
    export MACOSX_DEPLOYMENT_TARGET=10.13

... SNIP ...

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_ITLibMediaItem", referenced from:
      objc-class-ref in AppDelegate.o
  "_OBJC_CLASS_$_ITLibPlaylist", referenced from:
      objc-class-ref in AppDelegate.o
  "_OBJC_CLASS_$_ITLibrary", referenced from:
      objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

0

Trong trường hợp của tôi, tôi đang sản xuất nhiều sản phẩm từ cùng một dự án. Đối với một trong các sản phẩm, main.mtệp đã nhập tệp tiêu đề từ một thư mục khác trong cùng một dự án. Nhưng tệp đó không được bao gồm trong "Nguồn tuân thủ" trong "Giai đoạn xây dựng". Điều này gây ra lỗi trình liên kết.

Sau khi so sánh cẩn thận cài đặt "Các giai đoạn xây dựng" cho một sản phẩm có thể được tạo thành công, tôi nhận ra rằng .mtệp của tiêu đề cần được đưa vào danh sách "Nguồn được biên dịch". Vấn đề của tôi đã được giải quyết sau khi thêm tệp đó. Đính kèm hình ảnh cho rõ ràng. Tệp được đánh dấu phải được thêm vào.

nhập mô tả hình ảnh ở đây


-1

Tôi gặp vấn đề tương tự khi xây dựng dự án Ionic 1.

Tôi đã có thể giải quyết sự cố sau khi xóa tệp CDVLogger.h & CDVLogger.m


Có vẻ như bạn chưa bao giờ cần những tệp đó ngay từ đầu? Chắc hẳn đang gọi các tệp trong đó và các tệp khác, gây nhầm lẫn cho dự án và ngăn nó chạy.
Jake Dobson

-4

Được rồi, tôi đã gặp vấn đề tương tự hôm nay và bắt đầu tìm kiếm vấn đề đó, khi tôi bắt gặp chủ đề này. Tôi chưa đọc xong câu hỏi thì câu trả lời xuất hiện trong đầu tôi: Tôi đã khai báo một lớp với một hàm tạo rỗng

class MyClass{
    MyClass();

    void func_one(){
    // code
    }

    void func_two(){
    // code
    }

    ~MyClass(){
        cout << "Deleting object" << endl;
     }
};

Sau đó, tôi nghĩ tại sao không kết thúc (không chắc tôi có chính xác với lựa chọn từ ở đây không, nhưng ai quan tâm) hàm tạo của lớp tôi với dấu ngoặc nhọn ( {}). Tôi cũng vậy:

class MyClass{
    MyClass(){}

    void func_one(){
    // code
    }

    void func_two(){
    // code
    }

    ~MyClass(){
        cout << "Deleting object" << endl;
     }
};

Vấn đề đã được loại bỏ, mã của tôi bắt đầu hoạt động hoàn hảo.

Tôi biết, thông lệ tốt là điều tra vấn đề và tìm ra nguyên nhân thực sự, nhưng điều này đã hiệu quả với tôi.


Tôi không nghĩ điều này hữu ích cho chuỗi này ... Có vẻ như lỗi đang cố gắng gặp phải sự cố tệp, như nhập cùng một thứ vào các tệp riêng biệt. Tôi thấy nó lạ, bạn sẽ nhận được lỗi này, bởi vì đây là một cụ thể lỗi Objective-C ...
Jake Dobson

Tôi cũng gặp lỗi này trong C ++. Lỗi trình liên kết trong trường hợp của bạn có thể là do trình liên kết không thể tìm thấy mã cho hàm tạo của bạn. Tôi đã gặp lỗi tương tự với một chức năng mà tôi đã đổi tên nhưng vì Xcode 10 sẽ không tự mở nhật ký trình liên kết và tôi không biết bạn có thể nhấp chuột phải và "hiển thị nhật ký", tôi đã bối rối một vài phút cố gắng xác định lỗi.
Matt Parkins
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.