Linux实验,make与sudo make的区别

学校实验,使用的华清远见,VMworkstation+Ubuntu14.04-64位

内核版本3.16-generic,toolchain-4.4.6

环境是学校试验箱配套的华清远见Ubuntu虚拟机镜像,在完成基本环境配置后,开始的实验。

此部分实验主要是驱动移植准备阶段,需要编译例程提供的ex代码,代码就不具体贴了。


由于我使用的自己的电脑,VM有点问题,无法配置share文件夹,虚拟机中显示不出来,但tools正常安装。于是,采用的是直接拖拽的方式,将电脑的文件拖到虚拟机中。

使用cd、ls、make clean,对ex2文件夹下的文件直接执行make操作,报错。

在经过百度大学、咨询同学、直接拷贝完成了的镜像,连续几天的战斗中,最后无奈又好笑的解决了。

此处为提供给可能遇到同样问题的人一个解决方法和方法,完整将实验遇到的报错、问题、思路、解决方案贴出。


进入ex2文件夹,首先执行了make clean,此处与成功编译的其他虚拟机相同。

紧跟着执行make,出现 Error 2。

include/uapi/asm-generic/int-ll64.h:11:29: fatal error: asm/bitsperlong.h: No such file or directory
 #include <asm/bitsperlong.h>
                             ^
compilation terminated.
make[2]: *** [/home/linux/Desktop/ex2-init-exit/hello.o] Error 1
make[1]: *** [_module_/home/linux/Desktop/ex2-init-exit] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.16.0-30-generic'
make: *** [modules] Error 2


基本问题是 “int-ll64.h” 文件,include的头文件报错。

经过查询百度,相关的经验提供了将“int-ll64.h”定位到include<asm/bitsperlong.h>修改为<asm-generic/bitsperlong.h>,后便可编译通过


实测,此方法确实可行,此后make产生的错误,相关asm无法找到文件,都可以通过asm-generic修改来解决。

个人理解是由于内核公版问题,编译器自动对应的库名问题。

经过约十几个asm报错,都通过类似方法解决。但紧跟着出现了一个“变量隐式声明”的错误+asm-generic修改后无法找到文件,此时出现3个Error。(由于未保留有截图,无法完整复现错误声明)

“变量隐式声明”的错误:

rwsem.h:45:3: error: implicit declaration of function 'cmpxchg'

此部分定位到的函数是一段for循环体下,一个变量名。


此时,本人考虑通过更换编译器版本与升级内核的方式解决,但最终的解决方法让人哭笑不得。

在经过将近两天的奋斗,这个问题还是没有跳出来,主要是由于更换3.7内核的时候,需要选择system type,但这个虚拟机是配套提供的。综合考虑,还是最终选择去完成了的电脑中,拷贝一个新的镜像。(虽然,现镜像也是从这台电脑中拷贝,且配置环境过程一样)

拷贝的电脑已经完成了ex2的编译,但我重新拖拽ex2文件夹到虚拟机中,相同的步骤仍然报相同的错误。

在比对的两个电脑差异后,发现唯一的不同是文件目录不同,以及发送到虚拟机的方式不同。


原电脑是采用共享文件夹,直接操作,而我的电脑是采用拖拽、桌面make。

在排除拖拽产生文件损坏的问题后,尝试将文件夹复制到mnt/hgfs下进行编译。

此时,终端报了权限错误!

我敏感的感觉到会不会是权限问题(但之前从未认识到make需要超级管理员权限才可以执行)。

此时,我在不改变位置,原文件夹下,直接输入sudo make……编译过了……


此时我仍十分无法理解,sudo make和make的区别。从此错误来看,应该是sudo make采用了不同的库文件进行编译,但无法理解为何出现这种情况。

经过百度后,发现在15年就有网友提出过相同问题,其在root权限下,直接执行make报错,但sudo make就正常编译。这比我遇到的问题更加奇异。

http://www.openedv.com/posts/list/56860.htm


期待大神……


  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值