【问题标题】:Swift: error: linker command failed with exit code 1Swift:错误:链接器命令失败,退出代码为 1
【发布时间】:2016-06-21 00:24:32
【问题描述】:

有类似的问题,但没有一个能回答我的问题。

我正在使用 Swift 2.0 我正在开发一个使用 CoreLocation 显示经度和纬度的项目。

我还使用社交框架在 twitter 和 facebook 上发帖。

我收到一条错误消息,上面写着“错误:链接器命令失败,退出代码为 1”,然后它告诉我“(使用 -v 来查看调用)”,但我不明白这一点。

我将在 SO 上给出一个答案,以编写位置服务部分。这是链接https://stackoverflow.com/a/24696878/6140339

这是我的代码:

import UIKit
import Social
import CoreLocation

@UIApplicationMain

class FirstViewController: UIViewController, CLLocationManagerDelegate, UIApplicationDelegate {


var window: UIWindow?
var locationManager: CLLocationManager!
var seenError : Bool = false
var locationFixAchieved: Bool = false
var locationStatus : NSString = "Not Started"

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
    initLocationManager();
    return true
}

func initLocationManager() {
    seenError = false
    locationFixAchieved = false
    locationManager = CLLocationManager()
    locationManager.delegate = self
    CLLocationManager.locationServicesEnabled()
    locationManager.desiredAccuracy = kCLLocationAccuracyBest

    locationManager.requestAlwaysAuthorization()
}

func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
    locationManager.stopUpdatingLocation()
    if (error == true) {
        if (seenError == false) {
            seenError = true
            print(error)
        }
    }
}

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    if (locationFixAchieved == false) {
        locationFixAchieved = true
        let locationArray = locations as NSArray
        let locationObj = locationArray.lastObject as! CLLocation
        let coord = locationObj.coordinate

        print(coord.latitude)
        print(coord.longitude)
    }
}

func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
    var shouldIAllow = false

    switch status {
    case CLAuthorizationStatus.Restricted:
        locationStatus = "Restricted Access to location"
    case CLAuthorizationStatus.Denied:
        locationStatus = "User denied access to location"
    case CLAuthorizationStatus.NotDetermined:
        locationStatus = "Status not determined"
    default:
        locationStatus = "Allowed to location Access"
        shouldIAllow = true
    }
    NSNotificationCenter.defaultCenter().postNotificationName("LabelHasBeenUpdated", object: nil)
    if (shouldIAllow == true) {
        NSLog("Location to Allowed")
        //Start location services
        locationManager.startUpdatingLocation()
    } else {
        NSLog("Denied access: \(locationStatus)")
    }
}



@IBAction func postToFacebookButton(sender: UIButton) {
    if(SLComposeViewController.isAvailableForServiceType(SLServiceTypeFacebook)){
        let socialController = SLComposeViewController(forServiceType: SLServiceTypeFacebook)
        //creates post with pre-desired text
        socialController.setInitialText("")

        self.presentViewController(socialController, animated: true, completion: nil)
    }
}


@IBAction func postTweetButton(sender: UIButton) {
    if(SLComposeViewController.isAvailableForServiceType(SLServiceTypeTwitter)){
        let socialController = SLComposeViewController(forServiceType: SLServiceTypeTwitter)
        //creates post with pre-desired text
        socialController.setInitialText("")

        self.presentViewController(socialController, animated: true, completion: nil)
    }
}

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return .LightContent
}

override func viewDidLoad() {
    super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

//layer.cornerRadius layer.cornerRadius

}

整个错误信息:

重复符号_main: /Users/user/Library/Developer/Xcode/DerivedData/FarOut-ekrxzlgzfahpruavmlhyhiwiynum/Build/Intermediates/FarOut.build/Debug-iphonesimulator/FarOut.build/Objects-normal/x86_64/AppDelegate.o /Users/user/Library/Developer/Xcode/DerivedData/FarOut-ekrxzlgzfahpruavmlhyhiwiynum/Build/Intermediates/FarOut.build/Debug-iphonesimulator/FarOut.build/Objects-normal/x86_64/FirstViewController.o ld:架构 x86_64 的 1 个重复符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

【问题讨论】:

  • 如果您选择项目导航器中的最后一个图标(语音气泡),然后展开“构建”日志,您可以看到链接器输出。查找红色链接器错误并单击以展开该文本;它应该显示链接器无法完成的原因

标签: ios swift core-location location-services


【解决方案1】:

您的代码在我的 Xcode 中运行良好。我认为删除派生数据后,清理和重建将正常工作。还有一件事,您需要拆分 AppDelegate 和 ViewController 的代码,因为它们有自己的角色。

【讨论】:

  • 我清理过,重建过,但没有用。我重新启动了xCode,没有用。你只是复制粘贴吗?我不确定什么不起作用。据我所知,它与我的社交代码无关,它与我的位置代码有关,我将其复制并粘贴到一个新项目中,但仍然收到相同的错误
  • @GabrielMSC 我创建了单视图应用程序的新项目。然后删除了两个文件(AppDelegate.swift,ViewController.swift)。然后创建 FirstViewController.swift 并复制粘贴。你能复制粘贴显示的整个错误吗?错误注释上方有额外信息。
  • @GabrielMSC 错误说你有一个重复的符号,@UIApplicationMain 注释。您有两个选择,删除 AppDelegate.swift 文件或将您的应用程序委托代码从 FirstViewController 移动到 AppDelegate。我建议后一种,我之前提到过,AppDelegate 有自己的角色。 Apple 的指南也不建议混合使用。
【解决方案2】:

同一个错误信息有很多不同的问题。(Linker command failed with exit code 1)

1)如果您有两个 same constants 在不同的类中,那么也会出现此问题。

2) 如果您不小心在实现文件中导入了 .m file 而不是 .h file

3) 如果您导入了同一个库的两个不同版本,也可能会出现此错误,在这种情况下,只需删除旧版本并仅保留一个版本即可。

4) 在“Project”而不是“Targets”中添加“other linker flags”。所以,你把它移到“Targets”,它不应该在“Project”。

5)project->target->build settings->search enable bitcode->set NO在DEBUG中查看

看看这个 .. 如果没问题,那么就按照下面的方式做一次。

菜单 > 产品 > 清洁 ...然后运行项目

希望对你有帮助.. :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 2017-04-12
    • 2018-06-12
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    相关资源
    最近更新 更多