⑴ 什麼叫做內核編譯,為什麼要進行內核編譯呢
對開源操作系統(主要是指linux)的內核源代碼在本機進行有針對性的編譯,就叫做內核編譯。
編譯內核的目的主要是改變內核的默認選項,比如內核原來不支持某硬體,原因是內核的相應選項默認狀態是disactivated,需要改變。
當然,也有人把新版的linux裝在舊機子上。這樣,許多在內核里activated的硬體,他沒有,將來也不需要。那麼,就可以在內核里去掉。以及一些服務、特殊的功能等等,如果用不著,比如機子是伺服器的話,最好在內核里關掉,"精兵簡政"。這是以系統安全和提高效率為目的。
有專門的工具對其進行編譯。這個問題不是幾句話能說明白的。看你的提問就知道你是剛剛學習這些內容,建議不要好高騖遠,先把c語言學好,然後再研究這些東西。
歡迎訪問我的論壇:)
http://www.chinesebloger.com
期待您的支持:)
⑵ Android怎麼將開源庫編譯成jar包
1. 開源庫的jar可以直接拿來在Android裡面編譯使用,可能涉及一些依賴的庫。
2. 如果需要編譯Jar包,有兩種選擇:
第一種: 基於java方式的Jar包,工程導入後,通過export方式導出的jar。
第二種: 基於Android方式的Jar包,工程通過Android lib project的方式導入的。具體步驟:
new->project...->Android Project from Existing Code->填入路徑->Finish->右擊工程->Export...->Java->JAR file
理論上如果開源庫不是基於Android開發的話,第二種方式導出Jar,估計需要比較久的解決依賴的過程。
⑶ opencv為什麼需要python編譯
因為官方釋放的版本缺少了很多深度學習相關的模塊。OpenCV是一個基於BSD許可(開源)發行的跨平台計算機視覺庫,可以運行在Linux、Windows、Android和MacOS操作系統。opencv需要python編譯是因為官方釋放的版本缺少了很多深度學習相關的模塊。Python由荷蘭數學和計算機科學研究學會的GuidovanRossum於1990年代初設計,作為一門叫做ABC語言的替代品。
⑷ oracle資料庫開發人員說『需要重新編譯一下』是什麼意思 是說要重新跑某個過程嗎
重新編譯,就是某個過程或者函數哪裡做了修改 需要重新編譯成可以執行的文件,並不是說重新跑某個過程。編譯完成之後,把編譯好了的過程再重新運行。
⑸ linux為什麼要編譯內核
Linux內核版本是不斷更新的,通常,更新的內核會支持更多的硬體,具備更好的進程管理能力,運行速度更快、 更穩定,並且一般會修復老版本中發現的許多漏洞等。而已安裝好的Linux系統如果不是滾動升級的,或者沒有內核更新選擇的話,如果用戶想要使用這些新特性,或想根據自己的硬體平台定製一個更高效,更穩定,更快速的內核,就需要重新編譯內核。
下載源碼編譯內核,如果不做相關優化,直接編譯,結果就跟現在正在使用的系統沒什麼區別。
學習linux驅動,必須要有實踐的平台環境吧,至於需不需要購置平台,要看你的學習目的了。
⑹ 運行java程序時,為什麼要先編譯再運行,編譯運行一起進行不行嗎
java講究的是 一次編譯 處處運行,也就是提高了程序的一致性。java的程序之所在不同的操作系統上的運行結果是一樣的,是因為java虛擬機。
所以要運行java都要裝一個叫jdk的東西,裡面有java的虛擬機。這個虛擬機就是來解釋我們寫的代碼。通過這個虛擬機,就實現了代碼的移植。
我們寫好的程序,通過虛擬機,編譯成class文件,然後在運行。但是我們只需要編譯一次即可。
⑺ 開源代碼,編譯不過,哪位大神知道怎麼回事
即使是開放的源代碼,如果有一部分需要自己拿來作為己用,那也不是說直接拿來就可以百分之百地使用的。也必須要設置好相關的一些環境變數(例如:路徑名、系統鏈接庫等)以及相應的系統參數,然後再對自己的源程序進行編譯。只有這樣才能夠通過編譯,最後再經過和系統庫進行鏈接,最終生成可執行文件。
⑻ 為什麼有的模型要編譯成庫文件
庫文件:
一句話概述:
將函數封裝起來,放在裡面,提供介面,供調用。
庫文件可以說是程序員必須接觸的東西,我們常聽說庫,什麼編碼庫,xx庫啊等等,這些庫,其實它的前身仍然是代碼(跟我們平常寫的.c等等這些文件差不多),只不過,它編譯生成的不再是程序(裡面沒有main),而只是類似於頭文件之類的,只提供介面,給別人調用。
好處:
①把常用的放在庫中,需要的就直接調用(可以添加頭文件來進行聲明,否則,會隱式聲明)
②把不想公開的代碼放在庫中,但是留出頭文件,給出介面,讓其他人使用。
怎麼編譯生成庫:
預備知識:
庫文件包括動態庫,以及靜態庫。
動態庫是指編譯的時候不把這個庫文件所需要的東西編譯進去,而是在執行的時候再到庫中尋找相應的內容;
靜態庫是指吧程序所需的函數從庫中拿出來,然後編譯進程序裡面,後續執行就不再需要庫了。
雙方各有好處,前者,明顯的好處就是程序文件更小,而後者程序文件比較大,但是,運行不需要其他的庫支持。
過程:
主要為4大過程:
①代碼,常規書寫,不用寫main,然後,下一步,編譯:
代碼大致如下:
(1).c文件如下:
#include <stdio.h>
void print_hello()
{
printf("hello everybody\n");
}
1
2
3
4
5
6
1
2
3
4
5
6
.h文件:
#ifndef __HELLO_H__
#define __HELLO_H
void print_hello(); //這個可用,也可不用,不用的話,就變成隱式聲明。
#endif
1
2
3
4
1
2
3
4
②gcc -c hello.c //這一步是為了生成目標文件,但是,其實不需要它也行,不過,它是生成靜態庫與動態庫的中間狀態。
③ ar cr libmyhello.a hello.o //生成libmyhello.a 這么一個靜態庫,注意命名規則libxxx.a
④編譯執行程序:gcc xxx.c -o xxx -L ./libmyhello.a // 調用方法1;
gcc xxx.c -o xxx -lmyhello //調用方法2,此時,需要-l後面自動補了,但是,需要放到設備的lib環境變數中
執行程序:
#include <stdio.h>
#include "hello.h"
int main()
{
print_hello(); //能調用庫裡面的函數,輸出「hello everybody」
return 0;
}
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
動態庫:
①②同上;
③gcc -fPIC -shared -o libmyfirstso.so myfirstso.c //生成了動態庫,注意命名規則;
④編譯執行程序:gcc xxx.c -o xxx -L ./libmyfirstso.so //方法1;
gcc xxx.c -o xxx -lmyfirstso //方法2,同上,需要放到設備的lib環境變數中
當然,也可以將他們混合在一起編譯也行,如果是想指定路徑的話,直接指定即可,如:-L ./lib/libmyfirstso.so
總結:
庫文件非常重要,有以下三點需要注意:
①需要了解的是靜態庫與動態庫的區別;
②需要掌握靜態庫的生成指令(ar cr libhello.a hello.o)、動態庫生成指令(gcc -fPIC -shared -o libhelloso.so hello.o);
③需要掌握如何利用庫編譯執行程序(-L ./libhello.a ; -lhello)(兩種方法)