码迷,mamicode.com
首页 > 移动开发 > 详细

iOS duplicate symbol _main in:问题解决

时间:2014-07-30 23:53:55      阅读:315      评论:0      收藏:0      [点我收藏+]

标签:main   错误处理   duplicate symbol   

今天手贱给自己挖了个坑,由于工程中一些文件是后台的小伙伴写的C/C++文件,所以我一次性全部导入了,但是编译时出现了duplicate symbol _main in: A.o和B.o的编译错误。

下面写一个最简单的Demo还原这个情景。

新建一个工程,再新建Hello.h和Hello.c文件,代码如下:

Hello.h

#ifndef __Main__Hello__
#define __Main__Hello__

#include <stdio.h>

int main();

#endif /* defined(__Main__Hello__) */

Hello.c

#include "Hello.h"

int main() {
    return 0;
}

然后在ViewController.m中使用main函数:

#import "ViewController.h"
#import "Hello.h"

@interface ViewController ()

@end

@implementation ViewController
            
- (void)viewDidLoad {
    [super viewDidLoad];
    
    main();
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

编译时具体的报错信息如下:

duplicate symbol _main in:
    /Users/apple/Library/Developer/Xcode/DerivedData/Main-alxynewqhvyqdafbjcjfzntmqfml/Build/Intermediates/Main.build/Debug-iphonesimulator/Main.build/Objects-normal/i386/Hello.o
    /Users/apple/Library/Developer/Xcode/DerivedData/Main-alxynewqhvyqdafbjcjfzntmqfml/Build/Intermediates/Main.build/Debug-iphonesimulator/Main.build/Objects-normal/i386/main.o
ld: 1 duplicate symbol for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

出错原因很明显(因为我的Demo实在太简单了啦):

Hello.c文件中有一个main函数,在编译成Hello.o文件时有一个symbol _main。

而在工程原来的main.m文件中也有一个main函数,在编译成main.o文件时也有一个symbol _main。

而在一个工程中只能有一个main,所以出现了冲突。


解决方法:不要调用C/C++文件中的main函数,或者改写函数名,只是改函数的返回类型或参数列表也是不行的。


以后再遇到duplicate symbol之类的问题,都可以从这个角度出发思考,问题往往出在我们在工程中出现了一些同名的方法或函数,所以导致编译时出现了冲突。而编译时的错误信息A.o和B.o则标识出了这两个重复的symbol出现在哪两个文件中,接着在工程中打开这两个文件搜索冲突的方法名来对比修改。



iOS duplicate symbol _main in:问题解决,布布扣,bubuko.com

iOS duplicate symbol _main in:问题解决

标签:main   错误处理   duplicate symbol   

原文地址:http://blog.csdn.net/jymn_chen/article/details/38308771

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!