当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 7 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 下班前发一贴,有关C++与KDevelop
帖子发表于 : 2006-06-15 19:22 
头像

注册: 2006-06-13 14:47
帖子: 331
地址: 黄鹤楼
送出感谢: 0 次
接收感谢: 1
经过两天的折腾,终于装好了KDevelop,并且通过集成的IDE跑通了第一个程序Hello World。
发贴以示庆祝,呵呵!当然还有几个问题请高手们解答:
1、我知道程序要通过编辑+编译+连接 最后生成可执行的程序
在Linux下,用g++可以编译一个如a.out文件,这个文件是可以执行的,
也可以./configura ,make ,make install 最后生成一个可执行文件a,
只不过这两种执行方式不一样,一个是$./a.out,一个是$a
哪位达人能否详述一下区别(这三个命令的作用等 )!供初入学者多学习学习

2、在KDevelop下可以DEBUG,但是它不会make install,即不会最终生成可执行文件
install(as root user)方式,我输入密码也不行,一堆除了版 本的信息外,报一个错
kdesu -t -c 'cd '/home/jackpowell/Projects/firstlinux/debug' && WANT_AUTOCONF_2_5="1" WANT_AUTOMAKE_1_6="1" make -k install'
X Error: BadDevice, invalid or uninitialized input device 168
Major opcode: 145
Minor opcode: 3
Resource id: 0x0
Failed to open device
X Error: BadDevice, invalid or uninitialized input device 168
Major opcode: 145
Minor opcode: 3
Resource id: 0x0
Failed to open device
*** Compilation aborted ***

什么意思?打开什么设备失败?不懂
在console下手工sudo make install是可以的。


谢谢!


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2006-06-15 23:49 
头像

注册: 2005-08-15 0:04
帖子: 1880
地址: 南7技校
送出感谢: 0 次
接收感谢: 0 次
为什么要make install, 其实到make这一步就已经把文件编译好了,可以直接运行了。但是由于不在你的$PATH中,所以不能直接用$a的方式来运行,而make install 就是把相应的可执行文件直接拷贝到你的 $PATH中,一般是 /usr/bin 或者 /usr/local/bin ,具体的你可以看那个目录下的 Makefile文件的 install 部分。对于你自己写的程序来说,make install 是完全不需要的。其实你用g++生成的 a.out文件,直接将其拷贝到 /usr/bin 或 /usr/local/bin中照样可以用 $a.out的方式运行。(不过非常不提倡这种做法!)kdevelop我几乎没有用过,但是我以前用它测试 helloworld的时候还是可以的。好象 ide 生成的可执行文件一般在 debug目录下面把。不是很清楚,你找到这个文件,照样可以在那个目录下面用 $./a来运行。

./configure 的作用是执行该目录下面的 configure 脚本,检查你的机器相应的配置情况,并以此生成 Makefile 文件。(Makefile 文件实际上就是一些编译的规则)
make 命令就按照刚才生成的 Makefile 中的编译规则来编译你的源代码。
make install 是按照Makefile文件中的 install 部分的规则将你的生成的可执行程序等一些程序运行需要的东西拷贝到相应的目录中。


_________________
飞得高,飞得低,学习再学习,多少大秘密!
http://zhan.blog.ubuntu.org.cn


页首
 用户资料  
 
3 楼 
 文章标题 : 感谢!
帖子发表于 : 2006-06-16 10:42 
头像

注册: 2006-06-13 14:47
帖子: 331
地址: 黄鹤楼
送出感谢: 0 次
接收感谢: 1
谢谢!
看了一下,make install 居然是把东东都拷到/usr/local/bin下,我晕,这要是东东多了,不会浪费空间的阿!
Dos下运行一个程序最开始都是从当前目录 下找,为什么Linux不这样,非要加一个./呢?不解

还发现g++好像不加参数是对一个类进行编译,要是有很多个类,还是要用IDE方便一些
那如果我要发布我的程序给其他人用,该 如何操作?
直接给可运行的东东,还是像其它的安装一样,先config...再make,makeinstall呢?


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2006-06-17 2:28 
头像

注册: 2005-08-15 0:04
帖子: 1880
地址: 南7技校
送出感谢: 0 次
接收感谢: 0 次
一般来说发布源码包的话,是要有一个 configure脚本,然后生成 Makefile文件,然后再 make等等的。因为每人的软件配置不一定相同,如果发布源码包就要保证别人也能够编译成功。这个 configure 能够自动检查需要什么库之类的东西。然后动态的生成 Makefile文件。当然可以发布没有源码的 二进制包等等,这个和包的编译等有关,具体的我不太了解。如果楼主兄弟有这方面的需要的话,可以看一看和linux下面开发相关的文档。

g++是c++的编译器,并不是对一个类进行编译。加参数的目的就是要编译器能够找到相应编译需要的库。
如果很好掌握了 Makefile 的写法,那么用不用ide关系不太大。当然,如果源程序中有大量的与开发界面相关的繁冗的代码,那么用ide还是很不错的。

至于为什么要有 ./这么一个前缀,我不清楚,但是兄弟既然用上了 linux 就慢慢习惯把! :em01


_________________
飞得高,飞得低,学习再学习,多少大秘密!
http://zhan.blog.ubuntu.org.cn


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2006-06-19 13:49 
头像

注册: 2006-06-13 14:47
帖子: 331
地址: 黄鹤楼
送出感谢: 0 次
接收感谢: 1
呵呵,非常感谢前辈!


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 感谢!
帖子发表于 : 2006-06-19 16:38 
头像

注册: 2006-02-27 20:19
帖子: 599
地址: works system
送出感谢: 0 次
接收感谢: 0 次
xiaokang 写道:
Dos下运行一个程序最开始都是从当前目录 下找,为什么Linux不这样,非要加一个./呢?不解

我感觉应该从安全角度考虑,先从当前目录下找,也就相当于把当前目录加入了PATH,这是不安全的,例如,我在某台机器上有一个普通用户,我在这台机器上写了一个脚本,功能是用来格式化硬盘的,但我给它命名为ls,这是我告诉管理员,我文件夹下的东西有问题,ls时列不出文件来了,管理员也许就要到我这个目录下来查看一下,他一ls,首先从当前目录下找ls,然后找到了,运行,硬盘被格了,这是一件多么危险的事情!!!以前曾经有人发贴说明su和su -的区别,也是从安全性角度分析的,su -会加载root的PATH,而直接su是使用的su前用户的PATH,如果这个用户在自己的PATH里面加了一些恶意程序,但又和一些系统命令重名时,直接从这个用户su到root就会很危险,所以他推荐用su -而不用su,想来应该是同一个道理


_________________
东西路,南北走
十字路口人咬狗
拿起狗来打砖头
砖头咬了狗一口
图片


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2006-06-20 12:10 
头像

注册: 2005-08-15 0:04
帖子: 1880
地址: 南7技校
送出感谢: 0 次
接收感谢: 0 次
xiaokang 写道:
呵呵,非常感谢前辈!

声明一声,我不是什么前辈,只是用了将近一年ubuntu的初学者。呵呵,在这里我们共同进步阿~ :em01


_________________
飞得高,飞得低,学习再学习,多少大秘密!
http://zhan.blog.ubuntu.org.cn


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 7 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译