C程序的编译、链接、执行怎么来的?在.C文件里面写上符合C语言部分的源代码。OC也是一样的.记住:OC程序的后缀名是.m.



为什么要链接?第一个.o的目标文件里面它启动不了.因为它没有启动代码我们要加上启动代码,另外还要链接一些函数进去。

没有定义NSLog,a.out也没有出来.NSLog函数是Foundation框架之中的。如果你在OC程序当中使用到框架的类或者函数的话必须要告诉编译器这个类或者函数去哪里找。如果程序中使用到了框架中的函数或者类.那么在链接的时候,就必须要告诉编译器去哪1个框架中找这个函数或者类.因为框架有很多个。

NSLog函数是Foundation框架里面的,那么编译器在链接的时候找NSLog函数。框架有那么多,去哪个框架找?所以必须要得告诉编译器。怎么告诉它?在编译的时候、在链接的时候


OC程序的编译、链接、执行和C程序唯一的区别是在于链接的时候。如果你的程序用到了框架当中的功能,你在链接的时候必须要告诉它去哪个框架里面找。

去链接这个main.o的时候  以前说过链接做的事情其中之一就是要找函数。去哪里找函数呢?去这个Foundation框架里面找。

/*
1.OC程序的编译、链接、执行. 1). 在.m文件中写上复合OC语法规范的源代码. 2). 使用编译器将源代码编译为目标文件. cc -c xx.m a. 预处理
b. 检查语法
c. 编译. 3).链接 cc xx.o 如果程序中使用到了框架中的函数或者类.那么在链接的时候,就必须要告诉编译器去哪1个框架中找这个函数或者类. cc xx.o -framework 框架名称. cc main.o -framework Foundation 程序中用到了哪1个框架中的功能 那么就在这个地方告诉编译器. 4) 链接成功以后 就会生成1个a.out可执行文件 执行就可以了. 2、 我们1点击运行按钮 所有的事情Xcode就帮助我们自动做了. */ #include <stdio.h> int main(int argc, const char * argv[]) {
// insert code here...
printf("Hello, World!\n");
return ;
}
/**

 写上符合OC语法规范的源代码.

*/
#import <Foundation/Foundation.h> //引入Foundation框架里面的Foundation.h头文件. int main(){ NSLog(@"哈哈哈哈哈哈哈哈哈哈");
return ;
}

13_传智播客iOS视频教程_OC程序的编译链接的更多相关文章

  1. 14_传智播客iOS视频教程_OC的数据类型

    对比一下OC和C差别,首先第一个是数据类型. C语言的数据类型分哪几类?C语言有哪些数据类型? 基本数据类型当然还包括int的一些修饰符.像short.long.long long.unsigned. ...

  2. 15_传智播客iOS视频教程_OC语言完全兼容C语言

    OC支持C语言所有的运算符并且效果是一样的.C语言中所有的运算符OC都支持.这些所有的运算符OC当中全部都支持. 包括C语言的结构体.枚举全部都可以写在OC当中,没有任何问题,并且效果是一样的. 比如 ...

  3. 08_传智播客iOS视频教程_Foundation框架

    比如产生随机数.这个功能要你写吗?不用,因为苹果已经写好了.后面想开发一个ios程序,往界面上放一个按钮,实际上这个按钮不用你写别人已经写好了,你就拿过来拖一下就可以了. 框架是1个功能集 苹果或者第 ...

  4. 11_传智播客iOS视频教程_NS前缀和@符号

    NS前缀的有NSLog和NSString Cocoa就是用来开发带界面的应用程序. Foundation框架之中的类.函数绝大多数都是从NextStep来的.看到NS前缀就知道这个类是从哪里来的.是很 ...

  5. 12_传智播客iOS视频教程_注释和函数的定义和调用

    OC的注释和C语言的注释一模一样.它也分单行注释和多行注释. OC程序里面当然可以定义一个函数.并且定义的方式方法和调用的方式方法和我们C语言是一模一样的.OC有什么好学的?一样还学个什么呢? 重点是 ...

  6. 10_传智播客iOS视频教程_NSString

    从今天开始不会再去用C语言当中的字符串.因为OC当中设计了一种更为好用的存储字符串的变量. C的字符串和OC的字符串是有区别的. NSString类型的指针变量,只能存储OC字符串的地址.第一步是声明 ...

  7. 09_传智播客iOS视频教程_自动释放池与NSLog函数

    不要管什么是自动释放池,现在给你讲你也听不懂.就业班才讲,不要知道太多,知道太多对你不好.电影里面死的最惨的人就是知道最多的人.把代码写到自动释放池里面就可以了.NSLog是printf的增强版,它增 ...

  8. 07_传智播客iOS视频教程_#import指令

    mac切换中英文输入法默认是Ctrl+空格键. 预处理指令的执行时机是在编译之前.在编译之前执行预处理指令. #import指令是包含文件,将指定的文件的内容在预编译的时候拷贝到写指令的地方. #im ...

  9. 06_传智播客iOS视频教程_源文件后缀名和main函数

    OC与C语言的不同. 把OC程序运行起来,CPU只会找main函数.并且只会执行main函数当中的代码.当main函数的代码执行完毕之后这个程序就自动结束掉了. main函数的参数是可以让我们在运行程 ...

随机推荐

  1. Can you answer these queries(spoj 1043)

    题意:多次查询区间最长连续字段和 /* 用线段树维护区间最长子段和,最长左子段和,最长右子段和. */ #include<cstdio> #include<iostream> ...

  2. No route info of this topic

    使用rocketmq时报错 com.alibaba.rocketmq.client.exception.MQClientException: No route info of this topic, ...

  3. 给你两个字符串str1,str2,找出str2在str1中的位置

    如题 题目参考链接: http://blog.csdn.net/hxz_qlh/article/details/14110221 代码来自非原创 #include <iostream> # ...

  4. for-else和wihle-else组合用法

    当for和else组合一起使用的时候,for循环正常执行完毕,会执行else语句,否则,不会执行else语句 for i in range(10): if i == 2: break else: pr ...

  5. HDU 1114 【DP】

    题意: 给你空钱袋的质量和装满钱的钱袋的质量. 给你先行的n种货币的面值和质量. 问钱包里的钱最少是多少. 如果质量不可行,输出impossible. 思路: 完全背包. 屌丝有个地方没想通,就是如何 ...

  6. 转 Linux里设置环境变量的方法(export PATH)

    1.动态库路径的设置 Linux下调用动态库和windows不一样.linux 可执行程序是靠配置文件去读取路径的,因此有些时候需要设置路径 具体操作如下export LD_LIBRARY_PATH= ...

  7. http://www.doframe.com/jetoolweb/index.html

    http://www.doframe.com/jetoolweb/index.html http://www.doframe.com/jetoolweb/html/tasks/orders.html# ...

  8. 转:String数组初始化

    近日,笔者在java编程中因为疏忽对String数组的初始化定义错误,导致程序运行出错.现将所理解的String数组在此进行说明,并对String数组初始化进行分析. //一维数组String[] s ...

  9. openstack ocata 的cell 和 placement api

    The Ocata openstack just released recently. The official docs is not very stable yet. Some key steps ...

  10. 《javascript设计模式》读书笔记二(封装和隐藏信息)

    1.为什么要封装和信息隐藏 做过编程的朋友们知道"耦合"这个词.事实上封装的效果就是为了解耦,让类和类之间没有太多的联系,防止某一天改动某一类的时候,产生"多米骨诺牌效应 ...