导航:首页 > 源码编译 > 编译libprocps

编译libprocps

发布时间:2023-01-02 10:46:53

㈠ 在编译busybox的时候 ,,make 出错

我也遇到过同样的问题,不知道是不是和你是同样的问题,虽然时间很长了,还是把它贴出来,看能不能帮助到别人。这个应该是make版本太老的问题,我下了个3.8.2版本的make,就不再出现make: *** No rule to make target `|', needed by `include/autoconf.h'. Stop.提示。顺便说一下,解决问题的思路,| 代表order-only依赖,将此符号去掉,重新编译,就正常,因此估计是make版本太老。

㈡ 在linux内核编译的时候,一定要在/usr/src/kernel下才行吗我怎么在自己建立的文件夹下编译总是报错呢

Linux基础知识:内核编译-2.4至2.6
前言
linux-2.6.x内核发布后, 坛子里的兄弟们肯定都迫不及待地要升级原有的2.4.x内核. 但是由于与2.6.x内核配套的系统程序并没有相应的来得及更新, 升级过程会碰到很多问题, 因此觉得有必要把我的经验与大家share一下:-) XD们以后碰到类似问题时, 请先阅读本文, 而不要一上来就盲目发帖.
1. 备份重要的数据
这是个好习惯,就不用多说了:-)
2. 下载最新的2.6.x内核源码
这个当然要到官方网站或者它的mir...?去下载了, 最好别到那些unknown的网站去下, 因为那些源码包有可能被恶意做了手脚. 最新的linux-2.6.4.tar.bz2源码包大概有33M左右. 下载的时候可以泡杯coffee, 然后点根烟......
在/usr/src/目录下解开源码包, 得到源代码目录/usr/src/linux-2.6.4/. 在对kernel做任何事情之前, 建议你先看一下它的README文件和Documentation/Changes文件, 从中你会得到不少有用的信息. 这些信息会让你在随后的升级过程避免很多不必要的麻烦.
在文档Documentation/Changes中给出了欲成功地升级到kernel-2.6.x所需的最小系统软件要求, 比如对于kernel-2.6.4是这样的:
复制内容到剪贴板代码:
Gnu make 3.79.1 # make --version
binutils 2.12 # ld -v
util-linux 2.10 # fdformat --version
mole-init-tools 0.9.10 # depmod -V
e2fsprogs 1.29 # tune2fs
jfsutils 1.1.3 # fsck.jfs -V
reiserfsprogs 3.6.3 # reiserfsck -V 21|grep reiserfsprogs
xfsprogs 2.6.0 # xfs_db -V
pcmcia-cs 3.1.21 # cardmgr -V
quota-tools 3.09 # quota -V
PPP 2.4.0 # pppd --version
isdn4k-utils 3.1pre1 # isdnctrl 21|grep version
nfs-utils 1.0.5 # showmount --version
procps 3.2.0 # ps --version
oprofile 0.5.3 # oprofiled --version
对于RH8/9的用户而言, 上述要求基本上都能满足. 大概只有两个程序需要更新: motils工具包和mkinitrd程序.
3. 安装mole-init-tools-3.0.tar.gz工具包
linux-2.6.x内核的mole处理过程有所改变(很多原先在用户态下由motils处理的工作都放到内核里去完成了), 因此2.4.x下的motils工具包已经不在适合新的2.6.x内核, 必需将其升级到mole-init-tools工具包. 该工具包的最新版本是3.0(ps, 该工具包的版本从0.9.15一下跳到3.0, 其跨度之大...hoho). 可以下载mole-init-tools-3.0.tar.gz源码包的地方有两个:
Rusty's Linux Kernel Page:

接下来, 按照下列步骤安装mole-init-tools工具包:
复制内容到剪贴板代码:
# configure --prefix=/
# make moveold
# make all install
# ./generate-modprobe.conf /etc/modprobe.conf
命令"make moveold"将把系统原来的motils工具程序改名为"*.old"(比如,lsmod.old等等). NOTE! 这是非常重要的一步, 千万不要省略. 这将使得你可以继续使用原有的linux-2.4.x系统, 因为在2.4.x系统下, 新的mole-init-tools工具包实际上是倚赖原来"*.old"程序来加载内核模块. 如果忘记了这一步也不要紧张, 可以先下载并安装原来的motils程序包, 然后按照上面的步骤重来一遍就可以了.
新的mole-init-tools工具包不再使用原来的/etc/moles.conf配置文件了, 而是使用新的配置文件/etc/modprobe.conf. 因此必需用命令"./generate-modprobe.conf /etc/modprobe.conf"来生成新的配置文件/etc/modprobe.conf. 但是令人不爽的是, 这个生成的新配置文件存在BUG, 下面我们将会提到.

㈢ 如何gdb调试一个运行中的进程

第一步 编译一个死循环程序。

/* File name malloc.c*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void getmem(void **p, int num){
*p = (void *)malloc(num);
}

void test(void){
char *str = NULL;
getmem((void **)&str, 100);
strcpy(str, "Hello");
printf("%s\n", str);
}

int main(void){
int i = 0;
while(1){
if (i == 1){
test();
return 1;
}
}
return 0;
}

我们可以看出,这个程序就是malloc一段内存空间,用来供strcpy使用,由于只是调试一下,就没有在test程序中加上一些关于strcpy的正确性判断语句。
函数的正常退出的情况是i==1,但是程序运行过程中根本无法使i==1成立。i的变量的值将会在使用gdb时用到。

开始编译
$gcc -g malloc.c

得用gdb,加上-g还是需要的。生成的可执行文件为a.out

第二步 让gdb连接到正在执行的进程上去
首先运行程序。
$./a.out
明显的,是一个死循环。

重新开一个shell
$ps -u
我的机器的运行情况如下所示:
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
wyc 7712 0.0 0.1 6092 3644 pts/8 Ss 10:24 0:00 bash
wyc 7880 0.0 0.1 6092 3608 pts/9 Ss 10:27 0:00 bash
wyc 7929 0.0 0.3 10848 6468 pts/9 S+ 10:28 0:00 gdb
wyc 8347 93.0 0.0 1652 284 pts/8 R+ 10:42 0:13 ./a.out
...

看到没有? ./a.out的进程号是8347。

现在启动gdb
$gdb

由于是调试运行的进程,不是可执行文件,后面不需要跟任何参数。在用 gdb调试运行状态下的程序时,最核心的就是gdb内部的attach命令
用法为
(gdb) attach

这是我的机器上的例子:
$ gdb
GNU gdb (GDB) 7.1.50.20100621
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show ing"
and "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu".
For bug reporting instructions, please see:
.
(gdb) attach 8347
Attaching to process 8347
Reading symbols from /home/wyc/desktop/my_program/review/a.out...done.
Reading symbols from /lib/tls/i686/cmov/libc.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib/tls/i686/cmov/libc.so.6
Reading symbols from /lib/ld-linux.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib/ld-linux.so.2
main () at malloc.c:19
19 if (i == 1){
(gdb) p i
$1 = 0
(gdb) set i=1
Ambiguous set command "i=1": .
(gdb) i=1
Undefined info command: "=1". Try "help info".
(gdb) set i=1
Ambiguous set command "i=1": .
(gdb) set var i=1
(gdb) l
14 }
15
16 int main(void){
17 int i = 0;
18 while(1){
19 if (i == 1){
20 test();
21 return 1;
22 }
23 }
(gdb) n
20 test();
(gdb)
21 return 1;
(gdb)
25 }
(gdb)
0xb7f47775 in __libc_start_main () from /lib/tls/i686/cmov/libc.so.6
(gdb)
Single stepping until exit from function __libc_start_main,
which has no line number information.

Program exited with code 01.
(gdb)

在运行到第20行命令的时候,可以看一下到运行./a.out的那个shell,应该hello字符串在标准输出上了。当gdb中显示进程退出时,./a.out的shell应该结束了当前进程了。
在gdb中用set var i=1 来修改变量i的值(用set i=1不能识别命令),使程序能够正常退出。

在调试时,当前程序调用的所有库也全部都出来了。这个例子中的
Reading symbols from /home/wyc/desktop/my_program/review/a.out...done.
Reading symbols from /lib/tls/i686/cmov/libc.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib/tls/i686/cmov/libc.so.6
Reading symbols from /lib/ld-linux.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib/ld-linux.so.2
是a.out程序所调用的全部库。可以用这种办法分析当前运行的程序的库的调用情况。

千万不要关掉gdb,以下调试更精彩:

第三步 在gdb中重启程序
在上面已经知道了程序正常退出了,但是gdb还没有退出,这时在gdb中运行run效果如何?

(gdb) run
Starting program: /home/wyc/desktop/my_program/review/a.out
下面是死循环了...
接下Ctrl+c,给gdb发个SIGINT的信号。

^C
Program received signal SIGINT, Interrupt.
main () at malloc.c:19
19 if (i == 1){
(gdb) p i
$2 = 0
(gdb) set var i=1
(gdb) n
20 test();
(gdb) n
Hello
21 return 1;
(gdb) n
25 }
(gdb) n
0xb7e7b775 in __libc_start_main () from /lib/tls/i686/cmov/libc.so.6
(gdb) n
Single stepping until exit from function __libc_start_main,
which has no line number information.

Program exited with code 01.

可以看出,用gdb连接进程后,他会找到运行这个进程所需的全部文件,当前进程关闭后,仍然可以在gdb中启动这个程序。

不得不佩服GDB的调试功能的强大

gdb中的其它命令,就看你分析程序时是否用到了,例如下面的一些简单的命令:

常用的bt, p , p/x , setp, info registers, break , jump ......

㈣ 怎么搭建openjdk源码环境

环境构建需要的工具
1.cygwin 工具。这个工具的主要用处是为了在window平台上模拟出一个unix虚拟环境。
为了能够在window下编译openJDK,我们需要手动安装的工具如下:
Devel:binutils,make.
Interpreters:m4
Utils:cpio,awk,file(我在安装的过程中,没找到awk包和file包,可能是版本的问题。)
Archive:zip,unzip
System:procps
以上提供的键值对说明:(前面是文件名:包名)
2.安装编译器,我选用的编译器是VS2010,因为这个编译器中包好了windows SDK v7.0a,否则还要自己去下载这个SDK
(cygwin和vs2010安装后都会在操作系统的path环境变量中加入自己的bin目录路径,必须保证VS2010的bin目录在 cygwin的bin目录之前,因为这两个软件的bin目录中各自都有一个连接器“link.exe”,但是只有VS2010中的连接器可以完成 openJDK的编译)
3.下载一个已经编译好的JDK。
4.最后一步就是下载一个Apache ANT,JDK中的java代码部分都是使用ANT脚本进行编译的,ANT版本要求在1.6.5以上。
5.准备依赖项。
由于OpenJDK中的源码没有100%开源,但是在编译JDK的时候,我们又需要这部分闭源包,官方称为“JDK plug”。这部分闭源包可以从Source Releases页面下载。在windows平台下,其是以jar包的形式存在的。通过下面的命令就可以安装
java -jar jdk-7-ea-plug-b121-windows-i586-09_dec_1010.jar
运行后就会出现提示框,点击accept接受协议,然后安装到指定目录即可。
安装完成后建立一个环境变量“ALT_BINARY_PLUGS-PATH”,变量值为安装的JDK plug的安装路径,后面编译的时候需要它
6.安装一个大于2.3版本的FreeType,这是一个免费的字体渲染库。JDK的Swing部分和JConsole这类工具要使用到它。安装好后建立两个环境变量“ALT_FREETYPE_LIB_PATH”和“ALT_FREETYPE_HEADERS_PATH”,分别指向FreeType安装目录下的bin目录和include目录。另外还有一点官方文档没有提到但必须要做的事情是把FreeType的bin目录加入到PATH环境变量中。
7.下载Microsoft DirectX 9.0 SDK(Summer 2004),安装后大约有298MB,在微软官方网站上搜索一下就可以找到下载地址,它是免费的。安装后建立环境变量“ALT_DXSDK_PATH”指向DirectX 9.0 SDK的安装目录
8.去寻找一个名为“MSVCR100.DLL”的动态链接库,如果读者在前面安装了全套的Visual Studio 2010,那这个文件在本机就能找到,否则上网搜索一下也能找到单独的下载地址,大概有744KB。建立环境变量“ALT_MSVCRNN_DLL_PATH”指向这个文件所在的目录。如果读者选择的是VS2003,这个文件名应当为“MSVCR73.DLL”,应该在很多软件中都包含有这个文件,如果找不到的话,前面下载的“Bootstrap JDK”的bin目录中应该也有一个,直接拿来用吧。
以上这些,基本的工具就准备完成了,看到这里是不是想吐血了呢!就一台笔记本,为了方便就在window下编译了。有条件的可以直接在Linux笔记本上编译OpenJDK,这样会省去好多麻烦。

㈤ linux下安装mysql

方法如下:

  1. 到mysql官网下载mysql编译好的二进制安装包,在下载页面Select Platform:选项选择linux-generic,然后把页面拉到底部,64位系统下载Linux - Generic (glibc 2.5) (x86, 64-bit),32位系统下载Linux - Generic (glibc 2.5) (x86, 32-bit)

  2. 解压32位安装包:

    进入安装包所在目录,执行命令:tarmysql-5.6.17-linux-glibc2.5-i686.tar.gz

  3. 复制解压后的mysql目录到系统的本地软件目录:

    执行命令:cpmysql-5.6.17-linux-glibc2.5-i686 /usr/local/mysql -r

    注意:目录结尾不要加/

    添加系统mysql组和mysql用户:

    执行命令:groupadd mysql和useradd -r -g mysql mysql

  4. 安装数据库:

    进入安装mysql软件目录:执行命令 cd /usr/local/mysql

    修改当前目录拥有者为mysql用户:执行命令chown -R mysql:mysql ./

  5. 安装数据库:执行命令./scripts/mysql_install_db --user=mysql

    修改当前目录拥有者为root用户:执行命令chown -R root:root ./

    修改当前data目录拥有者为mysql用户:执行命令chown -R mysql:mysql data

    到此数据库安装完毕

  6. 启动mysql服务和添加开机启动mysql服务:

    添加开机启动:执行命令cp support-files/mysql.server /etc/init.d/mysql,把启动脚本放到开机初始化目录

    启动mysql服务:执行命令service mysql start

    执行命令:ps -ef|grep mysql 看到mysql服务说明启动成功,如图

  7. 修改mysql的root用户密码,root初始密码为空的:

    执行命令:./bin/mysqladmin -u root password '密码'

  8. 把mysql客户端放到默认路径:

    ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql


㈥ 编译移植busybox出错,arm-linux-gcc版本4.3.3 busybox版本1.16.0 错误代码如下:

找不到链接库,不这些都是数学库,加参数 -lm 应该就能解决。
但编译过程这个东西应该是自己加。

busybox 一般都是静态的,编译静态程序,很多时候需要他以来的函数库也是静态的。你这个问题应该是编译环境不匹配。你编译了 uclibc 并且正确安装了没?

不过话说,不过是个编译,人家本来就支持 arm ,“移植”这两个字应该是不需要用了。

㈦ 交叉编译busybox显示libc.so.6丢失!

拷贝C 库
交叉应用程序的开发需要用到交叉编译的链接库,我们在移植应用程序到我们的目标板的时
候,需要把交叉编译的链接库也一起移植到目标板上,这里我们用到的交叉工具链的路径是
/usr/local/arm/...../,链接库的目录是/usr/local/arm/...../arm-linux/lib,将其中部分库文件及符号链接拷贝到root_nfs(你创建的busybox的根目录)文件夹下的lib文件夹中。
部分库文件及符号链接有:ld-2.3.2.so,ld-linux.so.2,libc-2.3.2.so,libc.so.6

阅读全文

与编译libprocps相关的资料

热点内容
迷你世界出编程软件了 浏览:673
res文件夹有哪些 浏览:142
交通信号灯单片机课程设计 浏览:826
如何测试流媒体服务器的并发能力 浏览:161
溯源码有分国家认证的吗 浏览:218
如何通过app查询产检报告 浏览:944
拉结尔安卓手机怎么用 浏览:695
驱动级进程代理源码 浏览:782
androidshape画线 浏览:510
程序员想辞职被拒绝 浏览:101
java面试逻辑 浏览:749
如何下载全英文app 浏览:724
js函数式编程指南 浏览:380
为什么安卓手机相机启动会卡 浏览:341
python中t是什么意思 浏览:765
移动硬盘内存加密 浏览:407
单片机测角度 浏览:864
URL服务器地址怎么填 浏览:438
压缩饼干会导致血糖高吗 浏览:569
cad中xc命令怎么用 浏览:424