随笔分类 - 编译
1
摘要:问题:环境:ubuntu 12.04,g++版本4.6.3,编译目标文件时出现warnings:u1204@u1204-zhw:~/hwsvn/2sw/4prj_mips/UCP_rt5350/src/trunk$ make clean;make
rm -f *.o local_ctrl
g++ -g3 -Wall -o0 -c msgrcv_cmd.cpp -o msgrcv_cmd.o
In file included from msgrcv_cmd.h:24:0, from msgrcv_cmd.cpp:30:
controller.h: In cons...
阅读全文
摘要:问题:将一个c文件改为cpp文件,其中的perror()改用C++中的std::cerr ,而strerror()只需要用到头文件,所以,重新编译时,将替换为。2. errno无疑是一个系统定义的全局变量,不是由用户来声明或定义的。查到中有这样的宏定义#ifndef errno
extern int errno;
#endif将头文件包含到程序中,重新编译,编译顺利完成。问题解决。
阅读全文
摘要:问题:在虚拟机中编译老内核linux-2.6.24,通过sudo apt-get install linux-source-2.6.24后,得到linux-source-2.6.24.tar.bz2。解压到linux-source-2.6.24中,cd linux-source-2.6.24,执行sudo make oldconfig,出现错误提示:error: sys/types.h: No such file or directory解决办法:1. 放狗搜,查到types/types.h应该位于libc6-dev的package中,david@david-804: apt-cache se
阅读全文
摘要:问题:使用snprintf()完成字符串的复制操作:#include #include #include #define ARR_SIZE(a) (sizeof((a))/sizeof((a)[0]))
#define LEN_BUF 5 int main()
{ char buf[] = "0123456789"; char buf1[LEN_BUF]; char buf2[LEN_BUF]; // char *buf2 = NULL; // Source buf greater than dest buf1 causes stack overflow // s...
阅读全文
摘要:问题:从网上拷贝了一段代码,粘贴到自己写的程序strcat_compare.c中,然后编译gcc -o strcat_compare strcat_compare.c;出现错误如下:avid@ubuntu:~/wrk/tmp$ gcc -o strcat_compare strcat_compare.c strcat_compare.c: In function ‘main’:
strcat_compare.c:28:1: error: stray ‘\343’ in program
strcat_compare.c:28:1: error: stray ‘\200’ in program
.
阅读全文
摘要:1.gcc版本过高,解决方法sudo apt-get install gcc-4.4sudo apt-get install g++-4.4装完后在/usr/bin目录下sudo mv gcc gcc.baksudo ln -s gcc-4.4 gccmv g++-4.4 g++g++ -v2.selected multilib '32' not installed解决方法sudo apt-get install g++-4.4-multilib3.host SharedLib: lib64EGL_translator (out/host/linux-x86/obj/lib/l
阅读全文
摘要:问题:程序模型用C++语言编写,在程序模型和调用函数之间添加了一个接口文件modelc.cpp,用来让用c语言程序调用程序模型中的函数;新添加了两个函数setPduPowerConsumptionCnt()和setPduPowerConsumptionTot(),用来清除PDU模型中的总功耗和功耗计数器;编译时出现错误提示:dingq@wd-u1110:~/hwsvn/2sw/1prj_linux/pdu/src/branches/pdu-isocket$ make clean;make
rm -f *.o pdu
arm-linux-g++ -g3 -Wall -o0 -I../../../
阅读全文
摘要:问题:在打印hostent的IP地址时,用到了inet_ntop(),在编译时显示这样的警告提示:dingq@wd-u1110:~/hwsvn/2sw/1prj_linux/pdu/src/branches/pdu-isocket/isocket$ make clean;make
rm -rf *.o tcpclient tcpserver
gcc -g3 -Wall -o0 -std=gnu99 -c nettrans.c -o nettrans.o
nettrans.c: In function ‘nettrans’:
nettrans.c:59:5: warning: implicit
阅读全文
摘要:问题:原来使用的ubuntu 11.10系统由于误操作,导致系统崩溃,重新安装了ubuntu 11.10;在编译内核的时候,提示如下错误:dingq@wd-u1110:~/hwsvn/2sw/1prj_linux/pdu/kernel/linux-2.6.30$ make menuconfig *** Unable to find the ncurses libraries or the *** required header files. *** 'make menuconfig' requires the ncurses libraries. *** *** Install
阅读全文
摘要:问题:在老内核2.6.24.3的目标板上,/dev下能看到ttyS0,ttyS1和ttyS2;没有ttys*文件;但是,内核升级到2.6.30后,在/dev下只能看到ttyS0和ttyS2,有ttys0~ttysf共16个文件;并且,不能通过open命令打开ttyS1设备。解决办法:1. 进入到内核所在目录linux-2.6.30,运行命令:make menuconfig使用/来查找serial字符,看到这么一行,Symbol: SERIAL_ATMEL_CONSOLE [=n] ...
阅读全文
摘要:问题:frm_package.c中调用了memset()和memcpy()函数,但是没有包含相应的头文件,编译时出现错误:dingq@wd-u1110:~/hwsvn/2sw/1prj_linux/pdu/src/branches/pdu-isocket/isocket$ make
gcc -g3 -Wall -o0 -c nettrans.c -o nettrans.o
gcc -g3 -Wall -o0 -c tcpclient.c -o tcpclient.o
gcc -g3 -Wall -o0 -c frm_package.c -o frm_package.o
frm_package.
阅读全文
摘要:问题:在研究一个问题时,碰到了新的问题。知道了-L. -lmyhello的正确放置位置。要研究的问题是:除了-static参数之外,使用静态库和使用动态库编译成目标程序使用的gcc命令完全一样,那当动态库和静态库同名时,gcc命令会优先使用哪个库?研究的范围在lib_test目录下有如下的文件:dingq@wd-u1110:~/wrk/tmp/lib_test$ ll
total 16
-rw-rw-r-- 1 dingq dingq 518 2012-07-31 10:17 hello.c
-rw-rw-r-- 1 dingq dingq 519 2012-07-31 10:22 hello
阅读全文
摘要:问题:原来有单个文件tcpclient.c,运行gcc -o tcpclient tcpclient.c可以顺利完成编译,并能与下载到目标板中的tcpserver成功通讯;现在把tcpclient.c中的底层通讯部分抽取出来,单独放到一个文件中nettrans.c中,并有netrans.h作为头文件;然后,使用命令gcc -o tcpclient nettrans.c tcpclient.c编译,也总能成功编译。但是,使用Makefile来编译,总是出现如下multiple definition of类的错误:dingq@u1110-120628:~/hwsvn/2sw/1prj_linux/
阅读全文
摘要:问题:编译程序时出现如下编译错误:dingq@u1110-120628:~/hwsvn/2sw/1prj_linux/pdu/src/branches/pdu-isocket/isocket$ gcc -o tcpclient tcpclient.c tcpclient.c: In function ‘main’:
tcpclient.c:59:46: error: dereferencing pointer to incomplete type源码是: // set params of sockaddr_in instances serv_addr.sin_family = AF_INE..
阅读全文
摘要:在查阅linux内核源码的过程中,发现存在两种不同类型的条件编译语句:#ifdef MACRO_A和#if defined(MACRO_A)或#if !defined(MACRO_A)#ifdef和#ifdefined()之间的区别实际上,两者并无本质的差别,但后者的应用范围更广,能支持多个预编译变量的检查。#if defined(MACRO_A) && !defined(MACRO_B)
#endif
如果用前者的方式来表达,只能使用嵌套的条件判断#ifdef(MACRO_A) #ifndef(MACRO_B) ...; ...; #endif...
阅读全文
摘要:前提:ubuntu-debug机器上向SVN提交了pdu-IVT,想在别的普通机器上验证直接make能否成功,编译出的用户程序能否运行。工作PC机上装有VMware,里面的ubuntu版本跟ubuntu-debug机器上相同,都是ubuntu 11.10版本。VMware的家目录下有个目录pdu-IVT,是从SVN上更新出来之后,直接拷贝过来的。在将ubuntu-debug机器上,make能成功,并且生成的二进制可执行程序pdu也能运行,并与switch成功建立连接;但在工作PC机的VMware中,运行make时,提示错误:/usr/bin/ld: cannot find -lCiscoEne
阅读全文
摘要:用途说明Linux内核为了达到最佳的磁盘操作效率,会把需要写入到磁盘的数据现在内存中缓存起来,在合适的时候才真正写入到磁盘中,这在绝大多数情况都是没有任何问题的,而且提高了系统的效率,但是如果系统当机、掉电,就会有些文件内容不会保存下来。在Linux系统关机或者重启时,会自动把缓冲区的内容自动同步到磁盘中。我们也可以手工去执行sync命令,强制将内存中的文件缓冲内容写到磁盘,这个命令是通过调用sync系统调用来实现的。(flush file system buffers。Synchronize data on disk with memory。Force changed blocks to d
阅读全文
摘要:WARNING: Unable to open an initial console这个主要是没有建立控制台,解决方式:内核选择如下选项:Device Drivers ---> Character devices ---> [*] Virtual terminal Serial drivers ---> 8250/16550 and compatible serial support [*] Console on 8250/16550 and compatible serial port (2) Maximum number of 8250/16550 serial port
阅读全文
摘要:相信很多学习嵌入式linux的人都碰到过这样一个问题:初学linux的时候大家都用的工具链版本多是3.4.5或3.4.2,名字为arm-linux-gcc或arm-softfloat-linux-gnu-gcc,可突然有一天发现这几个版本的编译器无法编译最新的内核了,并且发现人们都换了工具链了(arm-none-linux-gnueabi-gcc),怎么办,换呗。于是也都换成了这个工具链,编译内核,制作跟文件系统,按部就班的做,和以前没什么区别,很多人甚至想这些操作我都做烂了,闭着眼睛都能完成,一切和以前也没什么区别。可是紧接着问题来了,当内核启动到最后阶段挂载文件系统是出现如下错误:kern
阅读全文
摘要:1. 如果uboot的bootargs设置了,kernel的Boot options中的Default kernel command string设置与否,都不启作用,即bootargs覆盖掉设置的Default kernel command string,打印的信息也是bootargs传过来的command string。2. 如果uboot的bootargs未设置的话,kernel就以Boot options中的Default kernel command string的设置进行启动。总之: 不管是从NAND还是NOR起动,uboot是用来引导linux的,如果uboot的bootargs
阅读全文
1