導航:首頁 > 源碼編譯 > 編譯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相關的資料

熱點內容
山西有什麼app 瀏覽:406
app怎麼樣購買內存 瀏覽:30
如何注冊sqlserver伺服器 瀏覽:76
上士命令 瀏覽:490
股市中帶星號的app是什麼 瀏覽:709
什麼路由可以刷機做列印機伺服器 瀏覽:7
電腦怎麼找到雲伺服器 瀏覽:871
微信怎麼發應用app 瀏覽:776
花生殼dns伺服器地址 瀏覽:648
squad伺服器一般什麼時候人多 瀏覽:479
程序員戰門課 瀏覽:474
config保存伺服器地址 瀏覽:317
預訂網吧座位的app叫什麼 瀏覽:416
香港伺服器主機地址 瀏覽:640
網店美工pdf 瀏覽:447
一堆文件夾怎麼弄出來 瀏覽:743
博途如何編譯硬體 瀏覽:418
fortran程序pdf 瀏覽:504
電池消耗演算法 瀏覽:394
伺服器中斷連接怎麼處理 瀏覽:222