啊o额iu鱼吧 关注:170贴子:7,396

【c++】一次诡异的源码安装,各种报错……

只看楼主收藏回复

zhcon,因为debian的zhcon包有个严重bug,导致根本用不了utf-8,
只好源码安装,
于是出现一大堆的报错……


IP属地:广东1楼2014-12-31 10:37回复
    沙发……


    IP属地:广东2楼2014-12-31 10:38
    回复
      板凳……


      IP属地:广东3楼2014-12-31 10:38
      回复
        地板……


        IP属地:广东4楼2014-12-31 10:38
        回复
          首先是一大堆的函数没定义,就是memset之类的mem开头的,
          我知道<string.h>里有这个函数,于是include,
          然后发现有好多文件都报这个错,
          于是写个小脚本,所有源文件都include,
          #!/bin/sh
          #***************************************************
          #^> File Name: string.sh
          #^> Author: AoEiuV
          #^> Mail: 490674483@qq.com
          #^> Created Time: 2014/12/31 - 10:15:37
          #***************************************************
          for i in `ls *.cpp`
          do
          cat $i > ${i}.bak
          echo "#include <string.h>" >${i}
          cat ${i}.bak >>${i}
          rm ${i}.bak
          done


          IP属地:广东5楼2014-12-31 10:41
          收起回复
            忘了上报错了,
            basefont.cpp:80:55: error: ‘memcpy’ was not declared in this scope
            memcpy(&mNumChars, &mpBuf[5], sizeof(long));


            IP属地:广东6楼2014-12-31 10:45
            回复
              然后是没找到abs,include stdlib.h就好了,
              graphdev.cpp:134:20: error: ‘abs’ was not declared in this scope
              int ax = abs(dx) << 1;


              IP属地:广东7楼2014-12-31 10:46
              回复
                对了,我找那些文件都是用find |grep,不知道有没别的办法,或者我猜其实只要find就够了,
                find |grep graphdev.cpp
                其实我想直接送给vim的,
                find |grep graphdev.cpp |xargs vim
                但是不知道 为什么,这样打开的vim只要一退出,终端就卡掉了……


                IP属地:广东8楼2014-12-31 10:49
                回复
                  然后是一个强制转换错误,这都报错,我还以为强制转换就是随便换都不报错的呢,
                  是因为char*到int丢失精度了,用vim改成long就行了,
                  :%s/int)/long)/
                  但是现在的long明明和int一样大,为毛只有long可以,
                  难道以前的指针只占两个字节?然后现在的4字节指针要long才能确保存的下,
                  可是为毛会报错,应该是给个warning吧,
                  winime.cpp:254:28: error: cast from ‘char*’ to ‘unsigned int’ loses precision [-fpermissive]
                  p = (unsigned int) p + mpText;
                  ^
                  winime.cpp:275:28: error: cast from ‘char*’ to ‘unsigned int’ loses precision [-fpermissive]
                  p = (unsigned int) p + mpText;


                  IP属地:广东10楼2014-12-31 10:59
                  回复
                    对了对了,我怀疑是因为旧的gcc可以编译通过,
                    毕竟不可能自己都跑不起来就发布出去,
                    而且这个源码包不是最新的,
                    因为找不到官网之类的,
                    只好看别人的教程,搜索他们说的包名,
                    然后在csdn看到就下载了……


                    IP属地:广东11楼2014-12-31 11:02
                    回复
                      然后是找不到<term.h>,
                      这个是缺东西了,
                      百度了下说是缺ncurses,
                      突然想起来确实有说过需要这个,
                      我记得这个好像是GNU的,官网应该有源码包,
                      但懒得搞了,直接去debian仓库拿,sudo apt-get install libncurses5-dev
                      zhcon.cpp:63:18: fatal error: term.h: No such file or directory
                      #include <term.h>


                      IP属地:广东12楼2014-12-31 11:06
                      收起回复
                        然后是个诡异的东西未定义,没见过,百度一下发现,这个要include <sys/select.h>
                        inputmanager.h:92:5: error: ‘fd_set’ does not name a type
                        fd_set mFdSet;


                        IP属地:广东13楼2014-12-31 11:09
                        回复
                          然后是atoi函数的报错,表示不喜欢用这个函数,一般都用sscanf之类更全能的,这里可能是比较在意小效率吧,
                          据我所知,include stdlib.h就可以了,
                          inputclient.cpp:45:33: error: ‘atoi’ was not declared in this scope
                          iVal = atoi(sVal.c_str());


                          IP属地:广东14楼2014-12-31 11:13
                          回复
                            然后是说没有free函数,这东西都能没有,
                            我知道的有stdlib.h 和malloc.h有这个函数,于是include stdlib.h就好了,
                            inputmanager.cpp:231:32: error: ‘free’ was not declared in this scope
                            free(result);


                            IP属地:广东16楼2014-12-31 11:17
                            回复
                              编译就到这里结束了,我是怎么知道的呢,
                              因为我看到了链接错误……
                              zhcon.cpp:(.text+0x7dc): undefined reference to `tgetstr'
                              tgetstr似乎也是ncurses的函数,
                              ncurses已经安装了还是报错啊,
                              这个函数在哪个库呢,能不能手动添加链接的开关……


                              IP属地:广东17楼2014-12-31 11:30
                              回复