當前位置:首頁 » 編程軟體 » gdb92編譯安裝依賴包

gdb92編譯安裝依賴包

發布時間: 2023-02-22 00:49:16

『壹』 如何解決源碼包安裝時的依賴性問題

動態可執行文件使用最初編譯和鏈接程序時使用的庫文件的共享對象名稱來查找共享對象。它們在少數的幾個標准位置查找,比如在/lib和/usr/lib目錄及在LD_LIBRARY_PATH環境變數(主要用於指定查找共享庫,比如我們在安裝Oracle時指定路徑,exportLD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib)指定的目錄中。順便提一下,在這些庫目錄中找到的共享對象可能不是真正的文件;它們可能是指向位於其他位置的真實庫文件的符號鏈接(但通常仍舊在標准庫目錄的一個目錄中)。至少從系統管理員的觀點是在用於創建共享庫文件的共享庫軟體包的名稱和共享庫文件的名稱之間通常沒有什麼關系。例如,GLIBC2.3軟體包用於創建libc.so.6共享庫文件。也從本示例中注意到,添加到共享庫文件名結束的版本號(.6)跟用於創建它的版本號(2.3)沒有關系。這是由共享庫軟體包開發人員有意完成的,以便GLIBC的新版本可以重用相同的共享庫文件名libc.so.6。這允許您在系統上載入新版本的GLIBC,而不用中斷動態鏈接到lib.so.6共享庫文件的所有程序,當然假定新版本的GLIBC向後與動態可執行文件最初所鏈接的老版本GLIBC兼容。因此,即使庫文件或共享對象文件有與它們相關的版本號,這些版本號也不能幫助你確定他們來自哪個版本的共享軟體包。
注意:當將whatprovides選項用於rpm查詢命令時,可以獲得有關使用rpm軟體包載入到系統的現有共享對象的信息。這種混亂是由下面的事實造成的:單個共享庫文件可能支持某個范圍的共享庫軟體包版本。例如,要檢查soname庫文件/lib/libc.so.6支持的GLIBC共享庫軟體包,運行下面的命令:
#objmp--all-headers/lib/libc.so.6|less
向下滾動此報告,直到到達Versiondefinitions:部分,以便查看libc.so.6共享庫文件支持哪些GLIBC版本:
Versiondefinitions:
10x010x0865f4e6libc.so.6
20x000x0d696910GLIBC_2.0
30x000x0d696911GLIBC_2.1
GLIBC_2.0
40x000x09691f71GLIBC_2.1.1
GLIBC_2.1
50x000x09691f72GLIBC_2.1.2
GLIBC_2.1.1
60x000x09691f73GLIBC_2.1.3
GLIBC_2.1.2
70x000x0d696912GLIBC_2.2
GLIBC_2.1.3
80x000x09691a71GLIBC_2.2.1
GLIBC_2.2
90x000x09691a72GLIBC_2.2.2
GLIBC_2.2.1
100x000x09691a73GLIBC_2.2.3
GLIBC_2.2.2
110x000x09691a74GLIBC_2.2.4
GLIBC_2.2.3
120x000x09691a76GLIBC_2.2.6
GLIBC_2.2.4
130x000x0d696913GLIBC_2.3
GLIBC_2.2.6
140x000x09691972GLIBC_2.3.2
GLIBC_2.3
150x000x09691973GLIBC_2.3.3
GLIBC_2.3.2
160x000x09691974GLIBC_2.3.4
GLIBC_2.3.3
170x000x0d696914GLIBC_2.4
GLIBC_2.3.4
180x000x0d696915GLIBC_2.5
GLIBC_2.4
190x000x0963cf85GLIBC_PRIVATE
GLIBC_2.5
200x000x0b792650GCC_3.0
在本示例中,1ibc.so.6共享庫文件支持原先為GLIBC版本2.0到2.5而開發的所有動態執行文件。注意:也可以使用objmp命令來從共享庫文件中提取soname,命令如下所示:
#objmp--all-headers/lib/libcrypto.so.0.9.8b|grepSONAME
SONAMElibcrypto.so.6
objmp:/lib/libcrypto.so.0.9.8b:
接下來,將討論rpm軟體包是如何生成的,以便在新系統上安裝rpm軟體包時,這些共庫依賴性是己知的。
三、Rpm軟體包和共享庫依賴性
當程序員生成rpm軟體包時,ldd命令用於報告動態可執行文件軟體包中所有動態可執行文件使用的所有共享庫。另一個混亂是由下面的事實帶來的:相同軟體包中的不同動態可執行文件可能與相同的共享庫軟體包的不同版本進行鏈接。例如,Heartbeat軟體包中的不同程序可能已經進行了開發,並動態鏈接到libc.so.6sonmae共享庫文件的不同GLIBC版本。對rpm命令使用-q和--requires參數,可以看到rpm軟體包需要的共享庫的完整清單。例如,要看到Heartbeatrpm軟體包所有的所需依賴性,請使用命令:
#rpm-q--requires-pheartbeat-1.x.x.i386.rpm
這產生了下面的報告:
sysklogd
/bin/sh
/bin/sh
/usr/bin/python
ld-linux.so.2
libapphb.so.0
libc.so.6
libc.so.6(GLIBC_2.0)
libc.so.6(GLIBC_2.1)
libc.so.6(GLIBC_2.1.3)
libc.so.6(GLIBC_2.2)
libc.so.6(GLIBC_2.3)
libccmclient.so.0
libdl.so.2
libglib-1.2.so.0
libhbclient.so.0
libpils.so.0
libplumb.so.0
libpthread.so.0
librt.so.1
libstonith.so.0
注意,在此報告中,libc.so.6soname是所需要的,此共享庫必須支持使用GLIBC共享軟體包版本號2.0、2.1、2.1.3、2.2和2.3進行鏈接的動態可執行文件。這是由下面的事實決定的:Heartbeat軟體包中的不同動態可執行文件是針對不同版本的libc.so.6庫的每個版本進行鏈接的。在了解了動態可執行文件、共享對象、soname和共享庫軟體包彼此是如何相關的後,下面准備來看這樣的一個例子:當嘗試安裝rpm軟體包,並且它由於依賴性錯誤而失敗時,會發生什麼。yum能夠從指定的伺服器自動下載RPM包並且安裝,可以自動處理依賴性關系,並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。
四、手工解決依賴性問題
通常,當嘗試安裝發行版中沒有包括的軟體包(及不能由像up2date、apt-get或Yum一樣的更新工具自動解決其依賴性的軟體包)時,將碰到rpm依賴性錯誤。例如,如果嘗試在老的Linux發行版上使用rpm–ivh*rpm命令,例如所有的Heartbeatrpm包,那麼在安裝過程中就可能碰到下面的錯誤:
error:faileddependencies:
libc.so.6(GLIBC_2.3)isneededbyheartbeat-1.x.x
libc.so.6(GLIBC_2.3)isneededbyheartbeat-pils-1.x.x
libcrypto.so.0.9.6isneededbyheartbeat-stonith-1.x.x
libsnmp-0.4.2.6.soisneededbyheartbeat-stonith-1.x.x
注意,rpm命令沒有干擾報告所需的每個GLIBC共享庫軟體包版本號——它只報告所需的最高編號的版本號(GLIBC_2.3)。(假定原來的軟體包開發人員不會將相同軟體包中的可執行文件鏈接到不兼容版本的共享庫軟體包)所有的這些故障都報告所需的共享庫名稱或soname(而不是文件名稱,soname始終以「lib」開始)。但可以刪除添加到rpm報告的soname結束的版本號,並快速檢查以查看是否在系統中使用locate命令安裝這些共享庫(假設您的locate資料庫是最新的,有關更多信息,請參閱locate或slocate的手冊頁)。例如,

『貳』 ubuntu安裝gcc怎麼自動安裝依賴包

打開自己的電腦,之後打開終端,如果桌面上有快捷方式,就直接打開就行,沒有的話可以按下鍵盤上的ctrl+alt+t組合鍵。
之後就可以可以進行安裝了,因為要下載文件,所以必須進行連網,會進行自動的安裝,安裝好的之後就是如下圖所示。
系統如果不帶vim的編輯工具,可以向下邊那樣進行安裝,很快就可以安裝好了,安裝好了如下圖:
之後在主目錄里寫一個.c文件進行測試就寫一個常見的hello程序,如下圖所示。
之後就可以進行編譯了,切記要輸入正確,有時候一個空格的錯誤可能造成找不到命令。看下圖第一個就是錯誤的輸入,現的是正確的輸入。
6
之後再輸入運行命令就可以運行了。結果列印在終端上。

『叄』 內核編譯錯誤—「mkimage」

在內核編譯時經常出現各種錯誤。下圖是內核編譯常見問題之一:

"mkimage" command not found -U-Boot images will not be built

make[1]: *** [arch/arm/boot/uImage] Error 1

make: *** [uImage] Error 2

根據上圖提示信息,"mkimage" command not found -U-Boot images will not be built,先嘗試在linux系統裡面安裝依賴包mkimage,

輸入命令:sudo apt-get install uboot-mkimage

如下圖:

運行命令後,提示uboot-mkimage包不可用,被其它包引用了,意味著uboot-mkimage包丟失、廢棄或從其它源來獲得。

根據提示,可以用另一個包u-boot-tools替代,下面安裝u-boot-tools,

輸入命令:sudo apt-get install u-boot-tools

如下圖:

 安裝u-boot-tools包後,再繼續編譯內核,如下圖,顯示uImage is ready,說明內核編譯成功。接著可以給板子上電,啟動內核。

『肆』 wine編譯安裝時,依賴包的問題

Linux下軟體安裝詳解

在Windows下安裝軟體時,只需用滑鼠雙擊軟體的安裝程序,或者用Zip等解壓縮軟體解壓縮即可安裝。在Linux下安裝軟體對初學者來說,難度高於Windows下軟體安裝。下面我就詳細講解Linux下如何安裝軟體。
先來看看Linux軟體擴展名。軟體後綴為.rpm最初是Red Hat Linux提供的一種包封裝格式,現在許多Linux發行版本都使用;後綴為.deb是Den Linux提供的一種包封裝格式;後綴為.tar.gz、tar.Z、tar.bz2或.tgz是使用Unix系統打包工具tar打包的;後綴為.bin的一般是一些商業軟體。通過擴展名可以了解軟體格式,進而了解軟體安裝。
RPM格式軟體包的安裝
1.簡介
幾乎所有的Linux發行版本都使用某種形式的軟體包管理安裝、更新和卸載軟體。與直接從源代碼安裝相比,軟體包管理易於安裝和卸載;易於更新已安裝的軟體包;易於保護配置文件;易於跟蹤已安裝文件。
RPM全稱是Red Hat Package Manager(Red Hat包管理器)。RPM本質上就是一個包,包含可以立即在特定機器體系結構上安裝和運行的Linux軟體。RPM示意圖見圖1。
.sdec|安裝前腳本|二進制文件|二進制文件|。。。|安裝前腳本
圖1 RPM結構示意圖

大多數Linux RPM軟體包的命名有一定的規律,它遵循名稱-版本-修正版-類型-MYsoftware-1.2 -1.i386.rpm 。
2.安裝RPM包軟體
# rpm -ivh MYsoftware-1.2 -1.i386.rpm
RPM命令主要參數:
-i 安裝軟體。
-t 測試安裝,不是真的安裝。
-p 顯示安裝進度。
-f 忽略任何錯誤。
-U 升級安裝。
-v 檢測套件是否正確安裝。

這些參數可以同時採用。更多的內容可以參考RPM的命令幫助。
3.卸載軟體
# rpm -e 軟體名
需要說明的是,上面代碼中使用的是軟體名,而不是軟體包名。例如,要卸載software-1.2.-1.i386.rpm這個包時,應執行:
#rpm -e software
4.強行卸載RPM包
有時除去一個RPM是不行的,尤其是系統上有別的程序依賴於它的時候。如果執行命令會顯示如下錯誤信息:
## rpm -e xsnow
error: removing these packages would break dependencies:
/usr/X11R6/bin/xsnow is needed by x-amusements-1.0-1

在這種情況下,可以用--force選項重新安裝xsnow:
## rpm -ivh --force xsnow-1.41-1.i386.rpm
xsnow

這里推薦使用工具軟體Kleandisk,用它可以安全徹底清理掉不再使用的RPM包。詳細情況請查看2003年《開放系統世界》第12期。
5.安裝.src.rpm類型的文件
目前RPM有兩種模式,一種是已經過編碼的(i386.rpm),一種是未經編碼的(src.rpm)。
rpm --rebuild Filename.src.rpm
這時系統會建立一個文件Filenamr.rpm,在/usr/src/redflag/RPMS/子目錄下,一般是i386,具體情況和Linux發行版本有關。然後執行下面代碼即可:
rpm -ivh /usr/src/regflag/RPMS/i386/Filename.rpm
使用deb打包的軟體安裝
deb是Debian Linux提供的一個包管理器,它與RPM十分類似。但由於RPM出現得早,並且應用廣泛,所以在各種版本的Linux中都常見到,而Debian的包管理器dpkg只出現在Debina Linux中。它的優點是不用被嚴格的依賴性檢查所困擾,缺點是只在Debian Linux發行版中才能見到這個包管理工具。
1. 安裝
# dpkg -i MYsoftware-1.2.-1.deb
2. 卸載
# dpkg -e MYsoftware
使用源代碼進行軟體安裝
和RPM安裝方式相比,使用源代碼進行軟體安裝會復雜一些,但是用源代碼安裝軟體是Linux下進行軟體安裝的重要手段,也是運行Linux的最主要的優勢之一。使用源代碼安裝軟體,能按照用戶的需要選擇定製的安裝方式進行安裝,而不是僅僅依靠那些在安裝包中的預配置的參數選擇安裝。另外,仍然有一些軟體程序只能從源代碼處進行安裝。
現在有很多地方都提供源代碼包,到底在什麼地方獲得取決於軟體的特殊需要。對於那些使用比較普遍的軟體,如Sendmail,可以從商業網站處下載源代碼軟體包(如 )。一般的軟體包,可從開發者的Web站點下載。下面介紹一下安裝步驟:
1.解壓數據包
源代碼軟體通常以.tar.gz做為擴展名,也有tar.Z、tar.bz2或.tgz為擴展名的。不同擴展名解壓縮命令也不相同,見表1。

2.編譯軟體
成功解壓縮源代碼文件後,進入解包的目錄。在安裝前閱讀Readme文件和Install文件。盡管許多源代碼文件包都使用基本相同的命令,但是有時在閱讀這些文件時能發現一些重要的區別。例如,有些軟體包含一個可以安裝的安裝腳本程序(.sh)。在安裝前閱讀這些說明文件,有助於安裝成功和節約時間。
在安裝軟體以前要成為root用戶。實現這一點通常有兩種方式:在另一台終端以root用戶登錄,或者輸入「su」,此時系統會提示輸入root用戶的密碼。輸入密碼以後,就將一直擁有root用戶的許可權。如果已經是root用戶,那就可以進行下一步。
通常的安裝方法是從安裝包的目錄執行以下命令:
gunzip soft1.tar.gz
cd soft1
#. /configure #配置#
make #調用make#
make install #安裝源代碼#

刪除安裝時產生的臨時文件:
#make clean
卸載軟體:
#make uninstall
有些軟體包的源代碼編譯安裝後可以用make uninstall命令卸載。如果不提供此功能,則軟體的卸載必須手動刪除。由於軟體可能將文件分散地安裝在系統的多個目錄中,往往很難把它刪除干凈,應該在編譯前進行配置。
.bin文件安裝
擴展名為.bin文件是二進制的,它也是源程序經編譯後得到的機器語言。有一些軟體可以發布為以.bin為後綴的安裝包,例如,流媒體播放器RealONE。如果安裝過RealONE的Windows版的話,那麼安裝RealONE for Linux版本(文件名:r1p1_linux22_libc6_i386_a1.bin)就非常簡單了:
#chmod +x r1p1_linux22_libc6_i386_a1.bin
./ r1p1_linux22_libc6_i386_a1.bin
接下來選擇安裝方式,有普通安裝和高級安裝兩種。如果不想改動安裝目錄,就可選擇普通安裝,整個安裝過程幾乎和在Windwos下一樣。
.bin文件的卸載,以RealONE for Linux為例,如果採用普通安裝方式的話,在用戶主目錄下會有Real和Realplayer9兩個文件夾,把它們刪除即可。
Linux綠色軟體
Linux也有一些綠色軟體,不過不是很多。Linux系統提供一種機制:自動響應軟體運行進程的要求,為它設定好可以馬上運行的環境。這種機制可以是一種介面,或者是中間件。程序員編寫的程序可以直接拷貝分發,不用安裝,只要點擊程序的圖標,訪問操作系統提供的介面,設定好就可以工作。若要刪除軟體,直接刪除就可以,不用鏈接文件。這是最簡單的軟體安裝、卸載方式。
上面介紹了Linux軟體安裝的方法,對於Linux初學者來說,RPM安裝是一個不錯的選擇。如果想真正掌握Linux系統,源代碼安裝仍然是Linux下軟體安裝的重要手段。(T111)

『伍』 Ubuntu中進行./configure 時提示cannot compile a simple fortran program,怎麼解決呀

你好,編譯程序,常常要安裝很多dev包,包含頭文件,庫文件等。

所以編譯最好專用一個系統,這樣用得越久,安裝的依賴包就越全。


對你的問題感興趣是因為我怕我以後會遇到類似的問題。


你遇到了Linux下編譯包常遇到的問題——依賴的文件或包不存在,導致編譯報錯,失敗。

所以,如果你要自己解決問題的話,要學會根據提示安裝缺失的包。

話說,在Ubuntu下安裝包很容易——圖形界面,用新立得,命令用,apt-get, aptitude,dpkg 等。


查找文件屬於哪個包 apt-file search xxx

比如,找文件gsl-randist屬於哪個包

apt-file search gsl-randist
gsl-bin: /usr/bin/gsl-randist
gsl-bin: /usr/share/man/man1/gsl-randist.1.gz
libgsl0-dbg: /usr/lib/debug/usr/bin/gsl-randist


查詢包信息

apt-cahe


你的問題,我答案在附件里。如果還報錯,估計是你系統上缺少某些軟體包,但我系統上不缺。

實在解決不了的話,可以私信我。

『陸』 如何編譯可以在Windows下運行的帶有Python支持的ARM Linux GDB

做這件事情的目的是為了在QtCreator里調試ARM Linux程序的時候,能看清楚QString、QList這些Qt特有的對象的內容,而不是一個完全看不懂的結構體。
目前(2014年8月)Linaro、CodeSourcery的GCC工具鏈里的GDB都不支持Python。想知道你用的GDB支持不支持,試一試就行,這樣表示不支持:
(gdb) python
>print 'Hello GDB!'
>(按Ctrl+D)Python scripting is not supported in this of GDB.
這樣表示支持:
(gdb) python
>print 'Hello GDB!'
>(按Ctrl+D)Hello GDB!
這件事情乍一看也很簡單,只要把GDB源碼下載下來,然後再配置,打開Python支持就行了。實際上會遇到的問題是,在MinGW下,又要與「\」和「:」這兩個Windows路徑里的刺頭斗爭了。我覺得我之前挺傻,編譯MinGW下Qt的時候,就去硬磕源碼和configure腳本去了。這次GDB的configure是自動生成的,不是給人看的,configure.ac看起來也很費勁,根本磕不下去,於是我換了個思路,在ubuntu下交叉編譯吧,sudo apt-get install mingw32,這是Ubuntu下的MinGW交叉編譯器。
然後是依賴,這樣的GDB要依賴expat和python的開發版本。如果是ubuntu底下直接編譯,apt-cache search一下他們的開發版本,然後sudo apt-get install一下就好了;給MinGW交叉編譯就麻煩了。先說expat,這個好辦,把http://downloads.sourceforge.net/project/expat/expat/2.1.0/expat-2.1.0.tar.gz下載下來,然後:
./configure --prefix=[安裝目錄,如/home/c/mingw-gdb/expat] --host=i586-mingw32msvc
make
make install
會提示一些警告,無視即可。
Python就無語了,目前的GDB貌似最高支持Python 2.7,而2.7版本的Python本身不支持MinGW…… 好在有高手做了Patch,也寫了說明,可以參考這文章:http://mdqinc.com/blog/2011/10/cross-compiling-python-for-windows-with-mingw32/
但是,就算這樣,編譯也充滿挑戰,要修復很多問題,出來的Python還少「nt」模塊。就在我覺得沒辦法的時候,突然發現Windows版Qt提供的MinGW居然內置了Python開發包,位置在Tools/mingw48_32/opt,趕緊把它拷貝到Linux下,比如/home/c/mingw-gdb/python。當然,你也必須確保ubuntu下有可用的python。
然後,給GDB打一個補丁:
--- gdb-7.8/gdb/configure 2014-07-29 20:37:42.000000000 +0800
+++ gdb-7.8-old/gdb/configure 2014-08-30 00:08:27.122042706 +0800
@@ -8263,21 +8263,22 @@
# We have a python program to use, but it may be too old.
# Don't flag an error for --with-python=auto (the default).
have_python_config=yes
- python_includes=`${python_prog} ${srcdir}/python/python-config.py --includes`
+ python_config_tool=`echo ${python_prog} | sed "s#python.exe#python-config#g"`
+ python_includes=`${python_config_tool} --includes`
if test $? != 0; then
have_python_config=failed
if test "${with_python}" != auto; then
as_fn_error "failure running python-config --includes" "$LINENO" 5
fi
fi
- python_libs=`${python_prog} ${srcdir}/python/python-config.py --ldflags`
+ python_libs=`${python_config_tool} --ldflags`
if test $? != 0; then
have_python_config=failed
if test "${with_python}" != auto; then
as_fn_error "failure running python-config --ldflags" "$LINENO" 5
fi
fi
- python_prefix=`${python_prog} ${srcdir}/python/python-config.py --exec-prefix`
+ python_prefix=`${python_config_tool} --exec-prefix`
if test $? != 0; then
have_python_config=failed
if test "${with_python}" != auto; then
@@ -8343,12 +8344,12 @@
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+#if ac_fn_c_try_link "$LINENO"; then :
have_libpython=${version}
found_usable_python=yes
PYTHON_CPPFLAGS=$new_CPPFLAGS
PYTHON_LIBS=$new_LIBS
-fi
+#fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
CPPFLAGS=$save_CPPFLAGS
這個補丁的目的是強制為檢測到python。
然後給拷貝到Linux下的python開發包打一個補丁:
--- python-old/bin/python-config 2013-04-18 02:43:01.000000000 +0800
+++ python/bin/python-config 2014-08-30 00:53:16.630060288 +0800
@@ -1,4 +1,4 @@
-#!/temp/x32-480-posix-dwarf-r2/mingw32/opt/bin/python2.7.exe
+#!/usr/bin/python

import sys
import os
@@ -31,26 +31,23 @@

for opt in opt_flags:
if opt == '--prefix':
- print sysconfig.PREFIX
+ print '../python'

elif opt == '--exec-prefix':
- print sysconfig.EXEC_PREFIX
+ print '../python'

elif opt in ('--includes', '--cflags'):
- flags = ['-I' + sysconfig.get_python_inc(),
- '-I' + sysconfig.get_python_inc(plat_specific=True)]
+ flags = ['-I' + os.path.split(os.path.realpath(__file__))[0] + '/../include/python2.7']
if opt == '--cflags':
- flags.extend(getvar('CFLAGS').split())
+ flags += ['-fno-strict-aliasing -DMS_WIN32 -DMS_WINDOWS -DHAVE_USABLE_WCHAR_T -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes']
print ' '.join(flags)

elif opt in ('--libs', '--ldflags'):
- libs = getvar('LIBS').split() + getvar('SYSLIBS').split()
- libs.append('-lpython'+pyver)
+ libs = ['-lm -lpython2.7 -Wl,--out-implib=libpython2.7.dll.a']
# add the prefix/lib/pythonX.Y/config dir, but only if there is no
# shared library in prefix/lib/.
if opt == '--ldflags':
if not getvar('Py_ENABLE_SHARED'):
- libs.insert(0, '-L' + getvar('LIBPL'))
- libs.extend(getvar('LINKFORSHARED').split())
+ libs.insert(0, '-L' + os.path.split(os.path.realpath(__file__))[0] + '/../lib/python2.7/config')
print ' '.join(libs)

因為Linux下是無法運行開發包中的python.exe的,所以這個補丁借用了ubuntu的python。裡面的cflags和ldflags都是在Windows底下運行原始python-config獲得的。prefix和exec-prefix設成「../python」,可以在編譯完以後,把python開發包拷貝到gdb安裝目錄裡面的python子目錄,這樣運行GDB的時候就不需要設定PYTHONHOME環境變數了。
最後一個事情,確保你的Linux下有arm交叉編譯器,我的是arm-linux-gnueabihf,是啥target就寫啥。
准備工作做完了,開始配置和編譯:
./configure --with-expat --host=i586-mingw32msvc --target=arm-linux-gnueabihf --with-libexpat-prefix=[expat安裝位置] --with-python=[python開發包安裝位置/bin/python.exe]
make
make DESTDIR=[GDB安裝位置] install
然後把GDB安裝位置下面的所有文件拷貝到Windows下,再把python開發包拷貝到同目錄下的python子目錄,大功告成。
如果提示沒找到libpython2.7.dll,那就把GDB安裝目錄的python/bin下的拷貝到bin下。
如果發現生成的exe文件太大了,那就strip一下。
2015年9月12日追加:
在windows下調試時,一般會提示說載入不了共享庫,讓你用"set sysroot"或"set solib-search-path"之類設定路徑的。這個問題可以通過.gdbinit文件,用上面這兩條命令來設定路徑解決,如果想一勞永逸,可以在編譯的時候加上host_configargs環境變數來解決這個問題:
host_configargs=--with-sysroot=E:\MinGW\opt\sysroot-arm ./configure ...
或者
export host_configargs=--with-sysroot=E:\MinGW\opt\sysroot-arm
./configure ...

後面的路徑是你放在windows下的sysroot的位置。

『柒』 關於LINUX如何解決依賴包問題

沒那麼困難。。。通常安裝它的提示一個一個包的安裝就行

另外看看源碼中帶的README,會有幫助

openssl gzip這些都可以apt-get的

『捌』 升級openssh出錯,求大神指點怎麼解決

一、環境描述
1)操作系統:CentOS 6.5 64位
2)Openssl升級前版本:openssl 0.9.8e
3)Openssl升級後版本:openssl 1.0.1j(源碼安裝)

4)Openssh升級前版本:openssh-4.3p2-41.el5
5)Openssh升級後版本:openssh_6.7p1(源碼安裝)
6)連接工具SecureCrt
二、安裝Dropbear代替OpenSSH

安裝dropbear只是為了在升級失敗sshd啟動不起來時,依然可以登錄系統。也可以用其他工具代替,比如telnet

1)下載dropbear安裝包
https://matt.ucc.asn.au/dropbear/releases/dropbear-2014.66.tar.bz2
2)檢查安裝依賴包

rpm -qa zlib* gcc make
3)編譯安裝dropbear
# tar jxf dropbear-2014.66.tar.bz2
# cd dropbear-2014.66
# ./configure
# make && make install

檢查生成的文件是否正確:

4)生成證書
# /usr/local/bin/dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key (註:系統默認是沒有/etc/dropbear 目錄的需要自行到創建)
# /usr/local/bin/dropbearkey -t rsa -s 4096 -f /etc/dropbear/dropbear_rsa_host_key

5)啟動dropbear
# /usr/local/sbin/dropbear -p 2222 //監聽2222埠
查看是否啟動成功:

三、升級OpenSSL到openssl-1.0.1j,並刪除老版本
1)升級前准備
下載openssl-1.0.1j
http://www.openssl.org/source/openssl-1.0.1j.tar.gz
2)刪除舊版本

#rpm -e `rpm -qa | grep openssl` --allmatches --nodeps
3)安裝openssl, 一定記得加上--shared選項, 否則openssh編譯的時候會找不到新安裝的openssl的library, 會報錯: openssl的 header和library版本不匹配
(註:這里LZ糾結了很久,如果按照步驟執行./config --prefix=/usr --shared 依然報錯: openssl的 header和library版本不匹配,很可能是由於之前安裝的Openssl也是源碼安裝的,而且沒有刪除干凈,需要手工搜索ssl相關的文件
1.執行find / -name ssl
2.將搜索結果中/usr/lib /usr/lib64 /lib64 /lib等目錄下的結果逐一重命名,千萬不要亂刪除,逐一嘗試。這是個笨辦法,目前還沒有發現啥比較好的辦法。)
# ./config --prefix=/usr --shared
# make
# make test
# make install

完畢後查看openssl版本安裝是否正確
# openssl version -a

四、升級sshd到OpenSSH-6.7並刪除老版本ssh
1)升級前准備
查看是否缺包

# rpm -qa | egrep "gcc|make|perl|pam|pam-devel"

如果有配置yum了的話可以直接yum安裝這些包,這樣既可以檢驗是否裝了,沒裝的直接裝上。
yum -y install gcc* make perl pam pam-devel

2)下載openssh-6.7p1.tar.gz
http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-6.7p1.tar.gz
備份ssh :
# mv /etc/ssh /etc/ssh.bak
# openssl version -a

3)編譯安裝新版本openssh
# tar zxf openssh-6.7p1.tar.gz && cd openssh-6.7p1
# ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords
# make
先卸載完舊版本的openssh,再make install
# rpm -qa | grep openssh
# rpm -e `rpm -qa | grep openssh`

Openssh-askpass是用於圖形界面下輸入口令的,用不著可以不裝
# make install
4)查看是否升級到新版本

5)復制啟動腳本到/etc/init.d
# cp /root/openssh-6.7p1/contrib/RedHat/sshd.init /etc/init.d/sshd
加入開機自啟
# chkconfig --add sshd

6)啟動sshd,用start或reload。不要restart,restart 會直接斷開連接,而並不會接著啟動sshd服務,這時候要通過其他途徑進入機器,然後啟動sshd服務才行。

四、刪除dropbear。
終端軟體里再重新打開一個標簽,
在這里Dropbear用來防止升級不成功,用來替代openssh連接伺服器。
在開啟2222埠(dropbear啟動時的埠,可以設置別的 )的情況下,通過xshell連接的方法是:
ssh 192.168.0.1 2222 (192.168.0.1為需要連接的伺服器ip

刪除dropbear安裝的文件,並殺掉進程
# rm -rf /etc/dropbear/ /usr/local/sbin/dropbear /usr/local/bin/dropbear*

『玖』 gdb源碼編譯安裝

安裝完成提示鏈接庫方法

Q&A

Q: makeinfo is missing on your system
A: root用戶 sudo apt-get install texinfo
非root用戶 conda install -c conda-forge texinfo (需提前安裝conda)

『拾』 【路由器】OpenWrt 手動編譯 ipk

.ipk 文件是可以通過 OpenWrt 的包管理軟體 opkg 直接安裝,好比 .deb 文件與 apt 的關系。雖然官方的軟體倉庫已經很豐富了,但是有時仍然需要從源碼編譯一些第三方的軟體使用,例如銳捷認證等

但是由於路由器平台通常與常用的伺服器或者個人 PC 的處理器架構不同,並且路由器的處理器本身性能較弱,幾乎不可能直接在路由器上進行編譯生成 .ipk 文件,因此需要交叉編譯來實現

而官方的 OpenWrt 倉庫就提供了一個方便使用的交叉編譯環境

以 Debian / Ubuntu 為例,參考 官網給出的要求 ,可以通過下面命令來進行安裝依賴包

安裝/更新好這些依賴之後,就可以通過 git 拉取 OpenWrt 倉庫了

通常由於倉庫較大以及網速問題,可能會需要很久,其實可以通過 --depth 來限制拉取的倉庫深度,或者通過鏡像站來加速拉取,當然也可以兩者同時採用

進入 openwrt 倉庫後,首先需要更新軟體包列表 feeds ,它是在 OpenWrt 中共用位置的包的集合。運行以下命令即可更新內置軟體包列表並鏈接到編譯工具中:

通常使用圖形化菜單界面來進行配置編譯選項,依次配置處理器架構、具體的處理器型號以及設備

以小米 mini 路由器為例,應該將他們配置成如下圖所示

這一步就是獲取對應設備交叉編譯所需的編譯鏈

可以先搜索有沒有已經配置好的含有 Makefile 的倉庫,有了適配過的 Makefile 文件就可以很方便的來編譯源碼生成 .ipk 文件了

以 minieap 為例, github 上有已經完成的倉庫,依次可以直接拉取來編譯

在拉取完成倉庫後,就可以再次配置編譯選項,將需要編譯成 .ipk 的功能配置成模塊編譯,也就是標記成 M

對於 minieap 來說,在 Network 找到對應選項並配置成 M 即可,如下圖

配置完成後就可以進行編譯了,編譯命令也很簡單,以 minieap 為例如下所示

編譯完成後, .ipk 文件會生成在 ./bin/packages/<YourArchitecture>/base 目錄下,將其拷貝到路由器上就可以通過 opkg 進行安裝使用了

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:746
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:1010
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:716
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:878
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:774
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1124
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:349
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:227
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:911
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:873