當前位置:首頁 » 編程軟體 » linux編譯v8

linux編譯v8

發布時間: 2023-05-25 04:24:02

① 如何使用QEMU來模擬ARMv8開發平台

使用Qemu模擬Cortex-A9運行U-boot和linux 作者來源於網路
我的開發環境: Ubuntu-12.04 所有軟體包為最新

1. 安裝GNU工具鏈

sudo apt-get insatll gcc-arm-linux-gnueabi

sudo apt-get insatll g++-arm-linux-gnueabi
安裝完成後會在 /usr/arm-linux-gnueabi/ 目錄下生成庫文件、頭文件等。 我安裝的GCC版本為:
arm-linux-gnueabi-gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

Copyright (C) 2011 Free Software Foundation, Inc.

2. 安裝Qemu模擬器
sudo apt-get install qemu qemu-system qemu-utils

這時應該已經可以運行qemu-system-arm命令了, 其版本為:
qemu-system-arm --version

QEMU emulator version 1.0.50 (Debian 1.0.50-2012.03-0ubuntu2), Copyright (c) 2003-2008 Fabrice Bellard

3. 編譯和運行U-boot:
ftp://ftp.denx.de/pub/u-boot/ 下載最新版本的U-Boot源代碼, 我用的目前最新版本 u-boot-2012.04.tar.bz2
解壓後進入源代碼目錄,在Makefile裡面增加兩行:

② 新手應該如何讀GoogleV8引擎源代碼

新手的不太建議讀v8源代碼。新手如果通過v8學c++,估計在成功編譯之前就放棄了。我記得某個v8的developer在wingolog一系列關於v8分析的文章(posts tagged "v8")的comment里,或者是Lars,曾經提到v8不是用來學的,因為它存在的目的就是為了最高性能,裡面用了大量的奇巧淫技,比如說small integer表示,比如說把浮點數轉化成字元串的Grisus3演算法(http://florian.loitsch.com/publications/dtoa-pldi2010.pdf?attredirects=0). 另外,處於速度考慮,v8和普通的編譯器/虛擬機不太一樣,沒有太多control flow analysis和data flow analysis(至少我看的時候是這樣)。

需要知道的是,Lars原來是做Hotspot VM的,裡面大量的思想來自大神Urs Hölzle。大名鼎鼎的on stack replacement,polymorphic inline cache等等完全可以在Urs Hölzle二十年前的博士論文里可以找的到,所以要看懂v8這些理論少不了; V8里的hydrogen指令更是用來自Hotspot的C1Visualizer可以看,所以我想如果要學習的話,還不如先看看wingolog的這一系列v8文章:posts tagged "v8",以及Urs Hölzle的博士論文和相關論文http://i.stanford.e/pub/cstr/reports/cs/tr/94/1520/CS-TR-94-1520.pdf,最後最好還要熟悉virtual machine的實現。比如各種GC演算法,不然看v8里的對象管理你就直接暈了。有了這些理論打底,熟悉一般的compiler和virtual machine implementation,而且還熟悉ecmascript spec,熟悉C++的話,倒是可以開始看了...但如果你這些都熟悉,那看v8幹嘛呢?給它做code review? 比較有意思的是這些理論都熟悉了,然後比較各種javascript的實現。比如在對象表示上mozilla就不是v8的smi tag,而是利用NaN boxing;比如是直接inteprete還是像v8那樣有highlevel IR和lowlevel IR;等等。

③ 安裝了VMwareWorkstation.v8並安裝了Red Hat Enterprise Linux 6,但是裡面沒有安裝g++編譯器,只有gcc

建議:
1. 打開終端,輸入命令「 rpm -qa |grep c++」查看C++編譯器是否存在,如果存在應該顯示如下:
[root@localhost ~]# rpm -qa |grep c++
gcc-c++-4.1.2-46.el5
libstdc++-devel-4.1.2-46.el5
compat-libstdc++-33-3.2.3-61
compat-gcc-34-c++-3.4.6-4
compat-libstdc++-296-2.96-138
libstdc++-4.1.2-46.el5
2. 如果沒有反饋,說明對應的RPM包沒有安裝;
3. 可以在系統光碟的「Server」文件夾下,找到對應的RPM安裝包;
4. 將對應的RPM包拷貝到你的RHEL6中,安裝方式如下:
4.1 在圖形界面,直接雙擊安裝即可,如果出現錯誤,檢查是否一些相關聯的軟體包沒有正確安裝,按照提示信息,順序安裝即可;
4.2 在命令行界面,使用命令「rpm -ivh 對應的軟體包全名.rpm"安裝即可;
4.3 安裝完成後使用命令「rpm -qa |grep c++」查詢即可知道是否安裝正確。
5. 如果你購買了Redhat的服務或者是在Redhat中注冊過了的話,也可以使用Yum功能實現在線安裝;
6. 其他可能的方法。

④ 在ubuntu里怎樣運行編譯好的谷歌v8

大名頂頂的Chrome V8引擎大家應該都知道了,我就不廢話多說,不知道的可以去GOOGLE Code搜索。
不過不得不提的是Google Chrome V8引擎的開發者拉斯巴克(Lars Bak)。他是一個編程天才,卻遠離計算機世界的核心,在丹麥為Google工作,
這個工作地方是一個邊遠的農場,環境很優美。

在編譯之前先看一下我的機器環境:
1.Linux yuchao-Latitude-E5410 2.6.35-22-generic #33-Ubuntu SMP Sun Sep 19 20:34:50 UTC 2010 i686 GNU/Linux
2.gcc (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
3.GNU Make 3.81 這個程序創建為 i686-pc-linux-gnu
4.GNU ld (GNU Binutils for Ubuntu) 2.20.51-system.20100908
5.svn,版本 1.6.12 (r955767)
編譯於 Mar 23 2011,12:56:23
6.Python 2.6.6
7.SCons by Steven Knight et al.:
script: v2.0.0.final.0.r5023, 2010/06/14 22:05:46, by scons on scons-dev
engine: v2.0.0.final.0.r5023, 2010/06/14 22:05:46, by scons on scons-dev
特別說明:SCons 是一個用 Python 語言編寫的類似於 make 工具的程序。與 make 工具相比較,SCons 的配置文件更加簡單清晰明了,
除此之外,它還有許多的優點。本文將簡單介紹如何在軟體開發項目中使用 SCons,通過本文,讀者可以學習到如何使用 SCons 來建造自己的程序項目。

⑤ android jni程序(c++)如何編譯適用於arm-v8指令集的32位程序

可以看到Android上層的Application和ApplicationFramework都是使用Java編寫,

底層包括系統和使用眾多的LIiraries都是C/C++編寫的。

所以上層Java要調用底層的C/C++函數庫必須通過Java的JNI來實現。

下面將學習Android是如何通過Jni來實現Java對C/C++函數的調用。以HelloWorld程序為例:

第一步:

使用Java編寫HelloWorld 的Android應用程序:

package com.lucyfyr;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class HelloWorld extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.v("fresne", printJNI("I am HelloWorld Activity"));
}
static
{
//載入庫文件
System.loadLibrary("HelloWorldJni");
}
//聲明原生函數 參數為String類型 返回類型為String
private native String printJNI(String inputStr);
}

這一步我們可以使用eclipse來生成一個App;

因為eclipse會自動為我們編譯此Java文件,後面要是用到。

第二步:

生成共享庫的頭文件:

進入到eclipse生成的Android Project中 :/HelloWorld/bin/classes/com/lucyfyr/
下:

可以看到裡面後很多後綴為.class的文件,就是eclipse為我們自動編譯好了的java文件,其中就有:

HelloWorld.class文件。

退回到classes一級目錄:/HelloWorld/bin/classes/

執行如下命令:

javah com.lucyfyr.HelloWorld

生成文件:com_lucyfyr_HelloWorld.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_lucyfyr_HelloWorld */
#ifndef _Included_com_lucyfyr_HelloWorld
#define _Included_com_lucyfyr_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_lucyfyr_HelloWorld
* Method: printJNI
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_lucyfyr_HelloWorld_printJNI
(JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif

可以看到自動生成對應的函數:Java_com_lucyfyr_HelloWorld_printJNI

Java_ + 包名(com.lucyfyr) + 類名(HelloWorld) + 介面名(printJNI):必須要按此JNI規范來操作;

java虛擬機就可以在com.simon.HelloWorld類調用printJNI介面的時候自動找到這個C實現的Native函數調用。

當然函數名太長,可以在.c文件中通過函數名映射表來實現簡化。

第三步:

實現JNI原生函數源文件:

新建com_lucyfyr_HelloWorld.c文件:

#include <jni.h>
#define LOG_TAG "HelloWorld"
#include <utils/Log.h>
/* Native interface, it will be call in java code */
JNIEXPORT jstring JNICALL Java_com_lucyfyr_HelloWorld_printJNI(JNIEnv *env, jobject obj,jstring inputStr)
{
LOGI("fresne Hello World From libhelloworld.so!");
// 從 instring 字元串取得指向字元串 UTF 編碼的指針
const char *str =
(const char *)(*env)->GetStringUTFChars( env,inputStr, JNI_FALSE );
LOGI("fresne--->%s",(const char *)str);
// 通知虛擬機本地代碼不再需要通過 str 訪問 Java 字元串。
(*env)->ReleaseStringUTFChars(env, inputStr, (const char *)str );
return (*env)->NewStringUTF(env, "Hello World! I am Native interface");
}
/* This function will be call when the library first be load.
* You can do some init in the libray. return which version jni it support.
*/
jint JNI_OnLoad(JavaVM* vm, void* reserved)
{
void *venv;
LOGI("fresne----->JNI_OnLoad!");
if ((*vm)->GetEnv(vm, (void**)&venv, JNI_VERSION_1_4) != JNI_OK) {
LOGE("fresne--->ERROR: GetEnv failed");
return -1;
}
return JNI_VERSION_1_4;
}

OnLoadJava_com_lucyfyr_HelloWorld_printJNI

函數裡面做一些log輸出 注意JNI中的log輸出的不同。

JNI_OnLoad函數JNI規范定義的,當共享庫第一次被載入的時候會被回調,

這個函數裡面可以進行一些初始化工作,比如注冊函數映射表,緩存一些變數等,

最後返回當前環境所支持的JNI環境。本例只是簡單的返回當前JNI環境。

http://www.cnblogs.com/bastard/archive/2012/05/19/2508913.html

熱點內容
android獲取解析度 發布:2025-02-14 07:12:13 瀏覽:750
途觀l值得買哪個配置 發布:2025-02-14 07:06:33 瀏覽:60
格來雲伺服器到期 發布:2025-02-14 06:48:43 瀏覽:905
訂奧迪A7哪個配置比較好 發布:2025-02-14 06:44:23 瀏覽:140
spss的資料庫 發布:2025-02-14 06:37:32 瀏覽:120
sql除法運算 發布:2025-02-14 06:30:43 瀏覽:535
如何在家部署一台伺服器 發布:2025-02-14 06:22:04 瀏覽:434
u盤里文件夾是空的 發布:2025-02-14 06:13:22 瀏覽:804
安卓如何縮放圖片尺寸 發布:2025-02-14 06:06:34 瀏覽:117
六年級簡便演算法題 發布:2025-02-14 05:53:02 瀏覽:9