交叉編譯動態庫
① 用arm-linux交叉編譯器使用動態庫時搜索標准路徑是什麼
/usr/lib , /橘源usr/libxx xx為數字,一般32或64,x32
標准頭好伍畢文友芹件搜索路徑:/usr/include/
② arm-linux-gcc交叉編譯是靜態編譯還是動態的
動態的,你在後面加-static就是靜態的
③ lxml庫的交叉編譯
總有很多原因,需要在非x86平台下跑python。
python的交叉編譯網上有不少帖子,講的都很好,這里就不在多說,放兩個鏈接
http://ljgabc.github.io/2015/04/24/2015-04-24-%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91Python-3-4-2/
http://xiaoxia.org/2013/09/13/python-on-tomato/
lxml這類第三方庫,底層採用了C語言寫擴展。如果需要lxml在非侍虛纖X86平台上正確運行,那就需要將C語言擴展(xxx.so)編譯成對應平台的二進制文件。
一般來說,直接在對應平台上編譯安裝老仿即可。But,如果對應平台上內存太小、處理器太慢、空間太少或者說根本沒有譽激編譯器.....(其實就是說的嵌入式)
好吧,還是安心的交叉編譯lxml吧
lxml 依賴於 libxml2 、libxslt
首先把它兩給編譯了,安裝一個指定路徑 MYPREFIX
腳本里的 MY[xxx] 請指定對應的交叉編譯工具
lxml
libxslt
還是先上腳本
/usr/local/bin/python3 是host python,必須和target python的版本一致 ,要不出了事不負責
${MYPREFIX_PYTHON} 是target python 編譯安裝的根目錄
${DESTDIR} 編譯的結果文件生成路徑
LDFLAGS CC :一般交叉編譯都會指定的編譯工具或選項
大約就是這樣了
在深入了解下
為什麼要指定 LINKCC BLDSHARED LDSHARED ,這是啥?
這三個變數來自於 host python的 /usr/local/lib/python3.6/_sysconfigdata_m_XXXXXXXXX.py
在編譯 build_ext 的時候,python的主要工具類是 Extension (from distutils.core import setup, Extension) ,這個類可以配置ext們的include/src/宏定義/等等一系列東西,它使用你配置的 CC BLDSHARED 等變數覆蓋_sysconfigdata.py里的內容,然後進行編譯
LINKCC BLDSHARED LDSHARED 這三個變數會指定鏈接,動態庫鏈接時使用的編譯器默認全都是 gcc ................................ :<
所以在編譯lxml時只指定CC是沒用的,因為 LDSHARED 還會被使用
推廣一下, 以後第三方庫交叉編譯時可能還需要手動指定 _sysconfigdata.py 中的其他變數
GGGL
④ 如何交叉編譯 動態庫
首先,你要保證你編譯的程序使用的交叉編譯鏈是開發板支持的,例如arm-linux-4.3.2,一般是在虛擬機下面的linux系統下的/etc/profile裡面添加編譯鏈路徑;接著,需要確保使用的內核是開發板目前使用的內核,一般MINI2440是使用linux-2.6.30版本的,這個要在程序的makefile文件裡面改;還有,如果你使用靜態編譯方式文件會比較大,但是不用依賴庫,如果是用動態編譯,文件就比較小,但是依賴動態庫,如果放到開發板上運行提示缺少動態庫,就證明你沒有把動態庫放進開發板的/lib裡面,可以用ldd指令查看需要哪些庫;最後,記住移植的方式可以使用NFS或者TFTP,U盤也可以,放到開發板上後必須在文件存放的當前目錄下./可執行文件,或者把文件放入/bin或者/sbin下面,就可以直接可執行文件,不用加./你可以在程序裡面加些調試信息輸出,例如printf,以此證明有執行。
⑤ Ubuntu下使用mingw-w64交叉編譯ffmpeg
網上大部分編譯windows版ffmpeg的教程都是基於msys+mingw的,完全運行在windows上。由於msys2的性能實在是太糟糕了,編譯速度太感人,因此決定研究Linux下使用mingw-w64交叉編譯
先是安裝ubuntu版的mingw-w64
sudo apt install mingw-w64
然後在configure ffmpeg的時候,在正常的配置項之後加上。
--arch=x86 --target-os=mingw32 --cross-prefix=i686-w64-mingw32-
上面是32位庫編譯的配置,64位的如下
--arch=x86_64 --target-os=mingw32 --cross-prefix=x86_64-w64-mingw32-
而且最好使用動態庫,靜態庫還需要鏈接一大堆mingw的庫實現,而且還可能鏈接失敗。但這樣編譯出來的動態庫,還需要依賴 libgcc_s_sjlj-1.dll。如果要移除這個依賴,configure的時候還要加上 --extra-ldflags='-static-libgcc'
⑥ linux mount windows共享目錄 交叉編譯安卓動態庫傳輸錯誤
那就是軟體問題了