很简单的一个程序,为什么无法通过linux编译c程序

为什么国外程序员爱用 Mac?
时间: 11:32:50
&&&& 阅读:6988
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&from
Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里。普通用户喜欢 Mac 可以理解,毕竟 Mac 设计美观,简单好用,没有病毒。那么为什么呢?从个人使用经验来看我想有下面几个原因:
1、Mac OS X 是基于 Unix 的。这一点太重要了,尤其是对开发人员,至少对于我来说很重要,这意味着Unix 下一堆好用的工具都可以随手捡到。如果你是个 windows 开发人员,我想你会在 windows 上装一套cygwin 环境吧?你不用 flex/yacc,grep,screen,ssh,make?好多 open source 的项目只提供cygwin/gcc/make 的编译环境。Mac 就是基于 BSD Unix 的,所有这些都是 built in 的。
2、开发环境。c/c++/java/perl/python/php/ruby/lisp,各种 shell,应有尽有,直接支持,非常方便。你要在 windows 上开发 C++,要装个 Visual Studio 编译器吧?或者其他的 C++ 编译器;你要开发 Java,你要下载 Java SDK 吧,说不定还要一个 Elipse 或者 Netbean;你要用 Perl,要安装一个 Perl 解释器吧,Active Perl?你要 python/php/ruby,你要安装&&?开发程序需要库,图像处理,视频处理,人工智能之类大部分库都是只支持 Unix/Linux 的。Mac 基于 Unix,所以这些通通都和 Mac 能很好和睦相处。
3、编辑器 Vi/Emac。作为 程序员/IT 人员一个好用的编辑器太重要了,因为写程序/改系统配置都需要编辑器。我在 Mac 上差不多1/2的时间是 browser/email,另外1/2时间差不多就是 Vi 了。
4、没有病毒/木马。用了5年多的 Mac 就没看到病毒长成什么样,我还看不到 Mac 上装杀毒软件的需要。
5、不需要维护。Mac 买来就直接用,磁盘碎片整理?不需要。装驱动?Mac 装好了,驱动就好了。重装系统?我5年没有重装过一次(期间换了几次不同的 Mac)。
6、简洁。Mac 上所有的操作都简洁到了极致,尽量避免干扰用户,增加了程序员的生产力。比如切换无线网功能,在 Mac 上切换只需要1次鼠标点击就可以完成,在 windows 上需要点击多次鼠标(包括一些很愚蠢的确认对话框);再比如卸载 USB 盘,Mac 只需要1次鼠标点击,windows 至少需要点击右下角图标、停止设备、确认对话框等多次点击。
7、多窗口切换。这个很方便管理打开的程序/文档。我经常要在多个虚拟窗口切换,比如看浏览网页/邮件一个窗口,写程序/文档一个窗口。
8、程序员文化。国外程序员是以 Unix 为主流成长起来的。这一点和国内不同,中国程序员/开发人员大都是从90年代的 DOS 开始的,随着 Windows 的壮大,成长了一批使用 Microsoft 工具的程序员。这也解释了为什么自从 Mac 切换到 Unix 阵营后,Mac 会发展这么快。基于 Unix 的 Mac 一经推出后,迅速赢得了一大批老 Unix hacker 和新 Web 2.0/Linux hacker 的关注,正是因为这些忠实的 fans 影响了他们的人际网络,圈子,博客,从而影响了整个程序员文化。有点像 Ruby on Rails,开始是一小部分人(精英人士)试用,这些人感觉不错就在博客,研讨会等各种场合鼓吹,从而在 Web 开发领域刮起一阵 Ruby 风。
9、苹果很酷。每台电脑,每个系列都设计完美,从包装盒,宣传册,广告,电源线,电脑内部,电脑外观,电脑软件都精心设计,风格统一。甚至微小到螺 丝,看过苹果机箱上的螺丝,机箱里面的数据线吗?那个也是设计。每个 Mac 上都标记着:Designed by Apple in California,而不是 Desgined in USA,苹果就是这么酷,&我们是一家加州公司&。苹果的保密措施可以说做到了极致,产品官方不发售就在市场上看不到踪影。
10、企业家精神。苹果的传奇经历吸引了大批硅谷创业者,Apple/Google/Microsoft/Amazon/eBay/Yahoo 代表了创新,进取的企业家精神。这不是一个大原因,但可以看作是 Mac 在国外,尤其是在美国,尤其是在硅谷,尤其是在大学这么流行的一个小原因吧。据调查2007年美国大学 Mac 市场占有率第一,这些大学精英们毕业以后走上工作岗位,走上社会,再过几年其中一部分走入中层,走进高层,他们会如何影响 Mac 呢?
如果对于类似讨论有兴趣可以看看 VPSee 在 Top Language 讨论组上的回复:对了,你如果还是对上面那张图片有所怀疑的话,可以看看下面这张图片,来自最近的 。
&标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文地址:http://www.cnblogs.com/royi123/p/4051712.html
&&国之画&&&& &&&&chrome插件
版权所有 京ICP备号-2
迷上了代码!书上的一个程序不知道为什么编译不成功_百度知道
书上的一个程序不知道为什么编译不成功
我有更好的答案
这不是完整的程序。只是一个大程序中的一个子程序。要想编译、执行,还要增加一些代码。如下即可:ASSUME
CS: CODESCODES
SEGMENT;--------------------------------SOUND
采纳率:92%
来自团队:
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。为什么vs2010编一个很简单的程序也会用去很大的空间?_百度知道
为什么vs2010编一个很简单的程序也会用去很大的空间?
最近装上了vs2010,本来很高兴的,可是却发现,即使我编一个很简单的程序它也会用去我 好几十MB的空间
而vc6.0只会用去1.1MB左右,这是为什么呢???
能不能跟vc6.0一样小程序就用很小的空间???
后来我进文件夹看了看,发现主要是一个叫ipch的文...
怎么没人来回答,我把我的分全压这儿了啊
我有更好的答案
主要是debug占得空间大吧。。编译成release可以节省很多空间
为您推荐:
其他类似问题
vs2010的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
稍有积蓄, 积分 294, 距离下一级还需 206 积分
论坛徽章:0
本帖最后由 lofeng410 于
23:02 编辑
可能很多高手早就知道这样处理,但是俺是最近才琢磨明白,呵呵
(1)对编译所得的.ko进行strip -S,处理掉调试信息,这样可以大大缩小ko文件的大小
(2)使用KBUILD_EXTRA_SYMBOLS
主要使用于下面这样的场合:
有两个我们自己的模块,其中Module B使用了Module A中export的函数,因此在Module B的Makefile中必须加上这样的选项
KBUILD_EXTRA_SYMBOLS += /path/to/Module A/Module.symvers
export KBUILD_EXTRA_SYMBOLS
这样在编译Module B时,才不会出现Warning,提示说func1这个符号找不到,而编译得到的ko加载时也会出错。
需要注意的是:
(1)KBUILD_EXTRA_SYMBOLS 赋值时必须使用+=,而不能使用=及:=,这个是实验出来的,至于为什么必须这样,还不明白。如果哪位高手知道,还请指教~~
(2)KBUILD_EXTRA_SYMBOLS 必须使用export处理一下// Module A (mod_a.c)
#include&linux/init.h&
#include&linux/module.h&
#include&linux/kernel.h&
static int func1(void)
{
& && & printk(&In Func: %s...\n&,__func__);
& && & return 0;
}
// Export symbol func1
EXPORT_SYMBOL(func1);
static int __init hello_init(void)
{
& && & printk(&Module 1,Init!\n&);
& && & return 0;
}
static void __exit hello_exit(void)
{
& && & printk(&Module 1,Exit!\n&);
}
module_init(hello_init);
module_exit(hello_exit);
复制代码// Module B (mod_b.c)
#include&linux/init.h&
#include&linux/kernel.h&
#include&linux/module.h&
static int func2(void)
{
& && & extern int func1(void);
& && & func1();
& && & printk(&In Func: %s...\n&,__func__);
& && & return 0;
}
static int __init hello_init(void)
{
& && & printk(&Module 2,Init!\n&);
& && & func2();
& && & return 0;
}
static void __exit hello_exit(void)
{
& && & printk(&Module 2,Exit!\n&);
}
module_init(hello_init);
module_exit(hello_exit);
复制代码
可用积分 +18
白手起家, 积分 169, 距离下一级还需 31 积分
论坛徽章:2
本帖最后由 HazeC 于
12:29 编辑
回复 29# HazeC
解决就好,恭喜!
1、导出函数的内核模块(A.ko)int export_hello_kernel(void){
& && &&&int i = 0;
& && &&&printk(&%s-%pS\n& ,__FUNCTION__ ,(void *)export_hello_kernel);
}
EXPORT_SYMBOL(export_hello_kernel);复制代码2、引用函数的内核模块(B.ko)
首先是读取 /proc/kallsyms,找到export_hello_kernel的函数地址。
代码来自4.4.1版本内核文件&kernel/livepatch/core.c&struct klp_verify_args args = {
& && && && && & .name = name,
& && && && && & .addr = addr,
& && &&&};复制代码static int klp_verify_callback(void *data, const char *name,
& && && && && && && && && && & struct module *mod, unsigned long addr)
{
& && &&&struct klp_verify_args *args =
& && &&&if (!mod &&
& && && && &!strcmp(args-&name, name) &&
& && && && &args-&addr == addr)
& && && && && & return 1;
& && &&&return 0;
}复制代码static int klp_verify_vmlinux_symbol(const char *name, unsigned long addr)
{
& && &&&
& && &&&mutex_lock(&module_mutex);
& && &&&ret = kallsyms_on_each_symbol(klp_verify_callback, &args);
& && &&&mutex_unlock(&module_mutex);
& && &&&if (!ret) {
& && && && && & pr_err(&symbol '%s' not found at specified address 0x%016lx, kernel mismatch?\n&,
& && && && && && && && &name, addr);
& && && && && & return -EINVAL;
& && &&&}
& && &&&return 0;
}复制代码
调用klp_verify_vmlinux_symbol,name为&export_hello_kernel& ,addr是输出变量,保存的就是导出函数的地址。
找到函数地址之后
int (*run)(void) =复制代码run即为export_hello_kernel的指针了,可以直接调用了。
这样内核模块的开发就可以把核心的功能放在一个模块,其他功能可以以插件的形式挂载了。
啊哈。。直接拿来内核的代码,献丑了。CU排版真心不好用啊。
可用积分 +8
论坛徽章:36
KBUILD_EXTRA_SYMBOLS += /path/to/Module A/Module.symvers
export KBUILD_EXTRA_SYMBOLS
你是在哪个内核版本上实现的。
论坛徽章:36
测试一下对Module A 中:
EXPORT_SYMBOL(func1);
替换为:
EXPORT_SYMBOL_GPL(func1);
然后在 Module B 直接调用的情形。
家境小康, 积分 1421, 距离下一级还需 579 积分
论坛徽章:0
& & 我用的 linux-2.6.34 内核,似乎没有 这样的问题啊。 可以直接用啊。
稍有积蓄, 积分 294, 距离下一级还需 206 积分
论坛徽章:0
本帖最后由 lofeng410 于
20:59 编辑
& & 内核版本为2.6.32
测试一下对Module A 中:
然后在 Module B 直接调用的情形。
Godbach 发表于
之前就已经试过,这样不行的
稍有积蓄, 积分 294, 距离下一级还需 206 积分
论坛徽章:0
linyunxian
我的场景是这样的,有两个模块,编译时都是任意找了个地方放置,编译时只使用了内核源码目录下的modpost以及Modules.sym
论坛徽章:36
回复&&linyunxian
我的场景是这样的,有两个模块,编译时都是任意找了个地方放置,编译时只使用了内核 ...
lofeng410 发表于
就是那种普通的编译出来的内核模块吧
家境小康, 积分 1421, 距离下一级还需 579 积分
论坛徽章:0
& & 嗯,我实验的时候也是两个不同的模块。trip -S foo.ko 后可以直接使用的哟。
稍有积蓄, 积分 294, 距离下一级还需 206 积分
论坛徽章:0
& & 是的,只不过完全都是我们自己编码的,之前采用的是笨办法,将Module A的Modules.sym拷贝到Module B所在的目录,然后编译Module B
论坛徽章:36
我之前也测试过一个模块导出符号,另一个模块调用。并不存在你说的情况。顶多内核版本不一样。
你可以不用 strip,编译出来之后,看能否加载A 和B
北京盛拓优讯信息技术有限公司. 版权所有 京ICP备号 北京市公安局海淀分局网监中心备案编号:22
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处做一个Java程序员其实很简单--前言做一个Java程序员其实很简单--前言孤独的小白百家号人工智能现在炒的如火如荼,作为从事其他行业的你难道不想知道这帮程序员究竟在干什么吗?回想起自己Java编程之路不算长也不算短了,从大二开始一直到研究生毕业,再到现在的工作,其中学习的经验谈不上,教训倒是有很多。回想起自己Java编程之路不算长也不算短了,从大二开始一直到研究生毕业,再到现在的工作,其中学习的经验谈不上,教训倒是有很多。java的咖啡图标说实话个人不太喜欢用很专业的术语去讲解知识,虽然看起来很牛但是不够接地气,还记得自己在学校给学弟学妹们讲授Java课程的时候,讲到多态的时候,突发奇想的用到了龙生九子的例子,至今回想起来大家还是记忆犹新。废话不多说,开始Java编程之路吧。1、面向过程OR面向对象
学习编程,首先要弄清楚什么是面向过程编程和面向对象编程,个人理解面向过程编程就像是私人定制一样,不能根据模具进行批量生产。而面向过程就是现在的工厂批量生产了。快乐的程序员个人建议在刚开始学习的时候,从面向过程的语言入手例如C语言,在学习的时候不仅要学会如果灵活的运用判断if,循环while以及最重要的for循环,还要熟练运用自定义函数,逐渐锻炼自己的编程思想,让自己的代码变得简单易看。2、JDK是用来干啥的?对于一些初学者而言,安装编译环境是必不可少的环节,安装环境以后还要进行环境变量的配置,具体的配置过程后面会详细讲述。现在就说一下JDK的作用。由于我们在用文本或者编译器编写代码是用的Java语言,但是计算机可不认识,需要有个翻译告诉计算机这段代码应该怎么执行,而JDK就是这个翻译,它可以将Java文件翻译成class文件,也就是专业术语中的字节码。3、选择什么编译器呢?Eclipse启动界面(日食的标志)首先编译器的使用可以让我们事半功倍,估计现在很少有人用文本直接编写了吧。现在的编译器也是琳琅满目的,有NetBeans、Eclipse、MyEclipse和目前比较火的idea intellij,个人比较习惯用eclipse了,还记得当时刚使用这个编译器的时候,有人经常调侃说Eclipse(日食的意思)这是要把Sun公司(java的创始公司)吃掉啊。Swing开发界面因为它可以很方便的安装各种插件,MyEclipse的功能相对强大,各种插件的集成包括Swing和Tomcat等功能,NetBeans比较好的就是集成了窗体应用,如果对窗体比较感兴趣了可以试试,不过貌似。本文由百家号作者上传并发布,百家号仅提供信息发布平台。文章仅代表作者个人观点,不代表百度立场。未经作者许可,不得转载。孤独的小白百家号最近更新:简介:没有稳定的付出就没有稳定的回报作者最新文章相关文章

我要回帖

更多关于 小程序通过二维码编译 的文章

 

随机推荐