[Unix LF] 冷门知识-Android.mk行尾导致的编译问题
0. 背景
本来以为今天是平凡(上班又迟到5分钟,又要被扣钱)愉快(领导又在催我干活)的一天;
我被要求调试一个扫码头,叫SE4850,从公司代码库找到了代码。
基本操作啊,想着上午先把这个sensor的库搞起来;
然后mmm编译,提示no work to do,
1. What the fuck!
这尼玛啥意思??? 啥叫no work to do?
然后在驱动里面随便加了点东西,再编译试试;
What? 这特么都不报错,编译器兼容性到这地步了,还是编译器累了要休息了?
中间经过了很多骚操作,比如检查device-vendor.mk(其实与此无关),比如用camera 前面的mk文件编译mmm vendor/qcom/proprietary/mm-camera/mm-camera2/media-control,全编,等都木得用;
我不信邪,照着别的sensor改了一波,发现可以编译生成so库,但是之前我改的还是不行;
之后经过一系列头脑风暴…我特么都气的气血上涌了…-_-||
最终问题变成以下这样:
有两份文件,文件大小,文件名字,文件里面的内容全一模一样,但是一份可以编译生成so库,一份不可以;
卧槽这是为啥啊…难道我有毒,所以我写的代码也有毒?
2. Solution
去问了下同事,他个说,让我在linux下面对比看一下,有些东西在windows下面看不出来,但是在linux下面可以……
然后vim 看了这两个文件,能看出花来,都特么一模一样的,
但是我退出的时候,灵机一动,ls –l看了下这两个文件:
两个一模一样的文件,居然大小不一样.一个691字节,一个718字节(有问题的那个)
边上大佬说,用Notepad++看,这个看这个文件的行尾(格式),好像可以改;
注意看右下角的红框,这玩意是个啥,用NotePad++,点击这个图标,字符就出来了;
以下是没问题的行尾:
以下是有问题的行尾:
所以这个是代码无法编译OK的根本原因!!!!
这玩意咋改:百度链接如下
https://jingyan.baidu.com/article/ca2d939df77099aa6d31ce4b.html
此问题问题是这样造成的,我在windows下面新建了,这个android.mk文件,改了内容之后拷贝到服务器上,但是由于我的Notepad++默认的行尾是windows类型的,导致其无法编译;
把Notepad++的设置设置成Unix的行尾,再新建一个Android.mk文件,然后替换;
Mmm编译一波
mmm vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/sensor/libs/se4850_mono/
OK,库文件成功编译出来了,Notepad++设置行尾默认Unix可以避免此问题。
本文结束,希望对大家有帮助!