導航:首頁 > 源碼編譯 > golang編譯成c文件

golang編譯成c文件

發布時間:2023-05-10 08:26:51

『壹』 golang項目中使用條件編譯

golang中沒有類似C語言中條件編譯的寫法,比如在C代碼中可以使用如下語法做一些條件編譯,結合宏定義來使用可以實現諸如按需編譯release和debug版本代碼的需求

build tags 是通過代碼注釋的形式實現的,要寫在文件的最頂端;

go build指令在編譯項目的時候會檢查每一個文件的build tags,用來決定是編譯還是跳過該文件

build tags遵循以下規則

示例:

約束此文件只能在支持kqueue的BSD系統上編譯

一個文件可能包含多行條件編譯注釋,比如:

約束該文件在linux/386 或 darwin/386平台編譯

需要注意的點

正確的寫法如下:

編譯方法:

具有_$GOOS.go後綴的go文件在編譯的時候會根據當前平台來判斷是否將該文件導入並編譯;同樣適用於處理器架構判斷 _$GOARCH.go。

兩者可以結合起來使用,形式為: _$GOOS_$GOARCH.go

示例:

文件名必須提供,如果只由後綴的文件名會被編譯器忽略,比如:

這兩個文件會被編譯器忽略,因為以下劃線開頭的文件都會被忽略



『貳』 Golang怎樣實現像C語言那樣的枚舉類型

可以用注釋符//和/**/包枯敗圍C代碼
import 逗C地 和包含C代碼之間是沒有空行的
動態庫的導入和編譯選項通過LDFLAGS、CFLAGS/CXXFLAGS來設置
還可以用pkg-config #cgo pkg-config : xxxxname
編譯宏定義指定#cgo CFLAGS: -DNDEBUG -DXXXX=2
  今薯褲天先看看go和c之間的類型轉換:
char --> C.char --> byte
signed char --> C.schar --> int8
unsigned char --> C.uchar --> uint8
short int --> C.short --> int16
short unsigned int --> C.ushort -->沒手顫 uint16

『叄』 如何編譯armlinux的go

Golang也就是Go語言,現在已經發行到1.4.1版本了,語言特性優越性和背後Google強大靠山什麼的就不多說了。Golang的官方提供了多個平台上的二進制安裝包,遺憾的是並非沒有發布ARM平台的二進制安裝包。ARM平台沒辦法直接從官網下載二進制安裝包來安裝,好在Golang是支持多平台並且開源的語言,因此可以通過直接在ARM平台上編譯源代碼來安裝。整個過程主要包括編譯工具配置、獲取Golang源代碼、設置Golang編譯環境變數、編譯、配置Golang行環境變數等步驟。

註:本文選用樹莓派做測試,因為樹莓派是基於ARM平台的。

1、編譯工具配置

據說下個版本的golang編譯工具要使用golang自己來寫,但目前還是使用C編譯工具的。因此,首先要配置好C編譯工具:

1.1在Ubuntu或Debian平台上可以使用sudoapt-getinstallgcclibc6-dev命令安裝,樹莓派的RaspBian系統是基於Debian修改的,所以可以使用這種方法安裝。

1.2在RedHat或CentOS6平台上可以使用sudoyuminstallgcclibc-devel命令安裝。

安裝完成後可以輸入gcc--version命令驗證是否成功安裝。

2、獲取golang源代碼

2.1直接從官網下載源代碼壓縮包。

golang官網提供golang的源代碼壓縮包,可以直接下載,最新的1.4.1版本源代碼鏈接:/golang/go1.4.1.src.tar.gz

2.2使用git工具獲取。

golang使用git版本管理工具,也可以使用git獲取golang源代碼。推薦使用這個方法,因為以後可以隨時獲取最新的golang源代碼。

2.2.1首先確認ARM平台上已經安裝了git工具,可以使用git--version命令確認。一般linux平台都安裝了git,沒有的話可以自行安裝,不同平台的安裝方法可以參考:download/linux

2.2.2克隆遠程golang的git倉庫到本地

在終端cd到你想要安裝golang的目錄,確保該目錄下沒有名為go的目錄。然後以下命令獲取代碼倉庫:

gitclone/go

大陸地區可能會獲取失敗,在不翻牆的情況下我試了幾次都沒成功,原因大家都懂的。好在google已經將golang也託管到github上面,所以也可以通過下面命令獲取:

gitclone/golang/go.git

視網路情況,下載可能需要不少時間。我2M的帶寬花了將近兩個小時才下載完,雖然整個項目不過幾十兆==

下載完成後,可以看到目錄下多了一個go目錄,裡面即為golang的源代碼,在終端上執行cdgo命令進入該目錄。

執行下面命令檢出go1.4.1版本的源代碼,因為現在汪敏指已經有新的代碼提交上去了,最新的代碼可能不是最穩定的:

gitcheckoutgo1.4.1

至此,最新1.4.1發行版的源代碼獲取完畢

3、設置golang的編譯環境變數

主要有GOROOT、GOOS、GOARCH、GOARM四個環境變數需要設置,先解釋四個環境變數的意義。

3.1GOROOT

主要代表golang樹結構目錄的路徑,也就是上面git檢出的go目錄。一般可以不用設置這個環境變數,因為編譯的時候默認會以go目錄下src子目錄中的all.bash腳本困配運行時的父目錄作為GOROOT的值。為了保險起見,可以直接設拿芹置為go目錄的路徑。

3.2GOOS和GOARCH

分別代表編譯的目標系統和平台,可選值如下:

GOOSGOARCH

darwin386

darwinamd64

dragonfly386

dragonflyamd64

freebsd386

freebsdamd64

freebsdarm

linux386

linuxamd64

linuxarm

netbsd386

netbsdamd64

netbsdarm

openbsd386

openbsdamd64

plan9386

plan9amd64

solarisamd64

windows386

windowsamd64

需要注意的是這兩個值代表的是目標系統和平台,而不是編譯源代碼的系統和平台。樹莓派的RaspBian是linux系統,所以這些GOOS設置為linux,GOARCH設置為arm。

3.3GOARM

表示使用的浮點運算協處理器版本號,只對arm平台有用,可選值有5,6,7。如果是在目標平台上編譯源代碼,這個值可以不設置,它會自動判斷需要使用哪一個版本。

總結下來,在樹莓派上設置golang的編譯環境變數,可編輯$HOME/.bashrc文件,在末尾添加下面內容:

exportGOROOT=你的go目錄路徑

exportGOOS=linux

exportGOARCH=arm

編輯完後保存,執行source~/.bashrc命令讓修改生效。

4、編譯源代碼

環境變數配置完成自後就可以開始編譯源代碼。在go目錄下的src子目錄中,主要有all.bash和make.bash兩個腳本(另外還有兩個all.bat和make.bat腳本適用於window平台)。編譯實際上就是執行其中一個腳本,兩者的區別在於all.bash在編譯完成後還會執行一些測試套件。如果希望只編譯不測試,可以運行make.bash腳本。使用cd命令進入go下src目錄,執行./all.bash或者./make.bash命令即可開始編譯。由於硬體情況不同,編譯耗費的時間不同。在我的B型樹莓派編譯過程花費了將近半個小時,編譯完成後執行的測試套件又花費了差不多一個小時,總共花費了一個半小時左右。

5、配置golang運行環境變數

編譯完成後,go目錄下會生成bin目錄,裡面就是go的運行腳本。為了以後使用方法,可以將這個bin路徑添加到PATH環境變數中。同樣編輯~/.bashrc文件,因為前面設置過GOROOT環境變數指向go目錄了,所以只需要在末尾加上

exportPATH=$PATH:$GOROOT/bin

保存後同樣執行source~/.bashrc命令讓環境變數生效。

至此,golang源代碼編譯安裝成功。執行goversion應該就能看到當前golang的版本信息,表示編譯安裝成功。


『肆』 golang中調用c的正確姿勢

工程結構如上圖所示,我們需要實現的目標是在go文件中調用c文件

foo.c如下:

foo.go如下

foo.h如下:

編譯過程如下:
1、先將c文件編譯為.o文件,然後生成動態鏈接庫.dylib文件
(1) clang -c foo.c
(2 clang -shared foo.o -o libfoo.dylib
2、在上述的動態鏈接庫生成之後,在foo.go中添加動態鏈接命令:#cgo LDFLAGS: -L./ -lfoo

需要注意的是

中間不能有空格

『伍』 go語言如何調用c函數

直接嵌入c源代碼到go代碼裡面
package main
/*
#include <stdio.h>
void myhello(int i) {
printf("Hello C: %d\n", i);
}
*/
import "C"
import "fmt"
func main() {
C.myhello(C.int(12))
fmt.Println("Hello Go");
}
需要注意的是C代碼必須放在注釋裡面
import "C"語句和前面的C代碼之間不能有空行
運行結果
$ go build main.go && ./main
Hello C: 12
Hello Go
分開c代碼到單獨文件
嵌在一起代碼結構不是很好看,很多人包括我,還是喜歡把兩個分開,放在不同的文件裡面,顯得干凈,go源文件裡面是go的源代碼,c源文件裡面是c的源代碼。
$ ls
hello.c hello.h main.go
$ cat hello.h
void hello(int);
$ cat hello.c
#include <stdio.h>
void hello(int i) {
printf("Hello C: %d\n", i);
}
$ cat main.go
package main
// #include "hello.h"
import "C"
import "fmt"
func main() {
C.hello(C.int(12))
fmt.Println("Hello Go");
}
編譯運行
$ go build && ./main
Hello C: 12
Hello Go
編譯成庫文件
如果c文件比較多,最好還是能夠編譯成一個獨立的庫文件,然後go來調用庫。
$ find mylib main
mylib
mylib/hello.h
mylib/hello.c
main
main/main.go
編譯庫文件
$ cd mylib
# gcc -fPIC -shared -o libhello.so hello.c
編譯go程序
$ cd main
$ cat main.go
package main
// #cgo CFLAGS: -I../mylib
// #cgo LDFLAGS: -L../mylib -lhello
// #include "hello.h"
import "C"
import "fmt"
func main() {
C.hello(C.int(12))
fmt.Println("Hello Go");
}
$ go build main.go
運行
$ export LD_LIBRARY_PATH=../mylib
$ ./main
Hello C: 12
Hello Go
在我們的例子中,庫文件是編譯成動態庫的,main程序鏈接的時候也是採用的動態庫
$ ldd main
linux-vdso.so.1 => (0x00007fffc7968000)
libhello.so => ../mylib/libhello.so (0x00007f513684c000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f5136614000)
libc.so.6 => /lib64/libc.so.6 (0x00007f5136253000)
/lib64/ld-linux-x86-64.so.2 (0x000055d819227000)
理論上講也是可以編譯成整個一靜態鏈接的可執行程序,由於我的機器上缺少靜態鏈接的系統庫,比如libc.a,所以只能編譯成動態鏈接。

『陸』 Golang 的靜態編譯

Go 語言和 C 語言的一個很大的區別是, Go 語言只靜態編譯,做個測試:

一方面是 Go 語言編譯後的可執行文件大小比 C 語言的大很多,
另一方面是 C 語言的可執行文件需要依賴 glibc 動態庫,
用 ldd 命令可以看出來:

或者直接刪除 glibc 動態庫, C 可執行程序報錯,而 Go 的還能運行:

這時候只有內部命令可以運行,外部命令,包括 ln 甚至最常用的 ls 命令也不能運行了:

設置好 LD_PRELOAD 環境變數之後, ln 命令可以運行,但是 sudo 仍然不能運行

只能靠 root 用戶來重新創建軟連接了:

所以用 sudo 來 rm 文件要小心,還是用 root 比較好。如果沒有預先留一個打開的 root 終端,登錄都登不進去。

『柒』 如何在golang 中調用c的靜態庫或者動態庫

Cgo 使得Go程序能夠調用C代碼. cgo讀入一個用特別的格式寫的Go語言源文件, 輸出Go和C程序, 使得C程序能打包到Go語言的程序包中.
舉例說明一下. 下面是一個Go語言包, 包含了兩個函數 -- Random 和 Seed -- 是C語言庫中random和srandom函數的馬甲.
package rand

/*
#include <stdlib.h>
*/ import "C" func Random() int { return int(C.random()) } func Seed(i int) { C.srandom(C.uint(i)) }

我們來看一下這里都有什麼內容. 開始是一個包的導入語句.
rand包導入了"C"包, 但你會發現在Go的標准庫里沒有這個包. 那是因為C是一個"偽包", 一個為cgo引入的特殊的包名, 它是C命名空間的一個引用.
rand 包包含4個到C包的引用: 調用 C.random和C.srandom, 類型轉換 C.uint(i)還有引用語句.
Random函數調用libc中的random函數, 然後回返結果. 在C中, random返回一個C類型的長整形值, cgo把它輪換為C.long. 這個值必需轉換成Go的類型, 才能在Go程序中使用. 使用一個常見的Go類型轉換:
func Random() int { return int(C.random()) }

這是一個等價的函數, 使用了一個臨時變數來進行類型轉換:
func Random() int { var r C.long = C.random() return int(r) }

Seed函數則相反. 它接受一個Go語言的int類型, 轉換成C語言的unsigned int類型, 然後傳遞給C的srandom函數.
func Seed(i int) { C.srandom(C.uint(i)) }

需要注意的是, cgo中的unsigned int類型寫為C.uint; cgo的文檔中有完整的類型列表.
這個例子中還有一個細節我們沒有說到, 那就是導入語句上面的注釋.
/*
#include <stdlib.h>
*/ import "C"

Cgo可以識別這個注釋, 並在編譯C語言程序的時候將它當作一個頭文件來處理. 在這個例子中, 它只是一個include語句, 然而其實它可以是使用有效的C語言代碼. 這個注釋必需緊靠在import "C"這個語句的上面, 不能有空行, 就像是文檔注釋一樣.
Strings and things
與Go語言不同, C語言中沒有顯式的字元串類型. 字元串在C語言中是一個以0結尾的字元數組.
Go和C語言中的字元串轉換是通過C.CString, C.GoString,和C.GoStringN這些函數進行的. 這些轉換將得到字元串類型的一個副本.
下一個例子是實現一個Print函數, 它使用C標准庫中的fputs函數把一個字元串寫到標准輸出上:
package print // #include <stdio.h> // #include <stdlib.h> import "C" import "unsafe" func Print(s string) { cs := C.CString(s) C.fputs(cs, (*C.FILE)(C.stdout)) C.free(unsafe.Pointer(cs)) }

在C程序中進行的內存分配是不能被Go語言的內存管理器感知的. 當你使用C.CString創建一個C字元串時(或者其它類型的C語言內存分配), 你必需記得在使用完後用C.free來釋放它.
調用C.CString將返回一個指向字元數組開始處的指錯, 所以在函數退出前我們把它轉換成一個unsafe.Pointer(Go中與C的void 等價的東西), 使用C.free來釋放分配的內存. 一個慣用法是在分配內存後緊跟一個defer(特別是當這段代碼比較復雜的時候), 這樣我們就有了下面這個Print函數:
func Print(s string) { cs := C.CString(s) defer C.free(unsafe.Pointer(cs)) C.fputs(cs, (*C.FILE)(C.stdout)) }

構建 cgo 包
如果你使用goinstall, 構建cgo包就比較容易了, 只要調用像平常一樣使用goinstall命令, 它就能自動識別這個特殊的import "C", 然後自動使用cgo來編譯這些文件.
如果你想使用Go的Makefiles來構建, 那在CGOFILES變數中列出那些要用cgo處理的文件, 就像GOFILES變數包含一般的Go源文件一樣.
rand包的Makefile可以寫成下面這樣:
include $(GOROOT)/src/Make.inc

TARG=goblog/rand
CGOFILES=\ rand.go\ include $(GOROOT)/src/Make.pkg

然後輸入gomake開始構建.
更多 cgo 的資源
cgo的文檔中包含了關於C偽包的更多詳細的說明, 以及構建過程. Go代碼樹中的cgo的例子給出了更多更高級的用法.
一個簡單而又符合Go慣用法的基於cgo的包是Russ Cox寫的gosqlite. 而Go語言的網站上也列出了更多的的cgo包.
最後, 如果你對於cgo的內部是怎麼運作這個事情感到好奇的話, 去看看運行時包的cgocall.c文件的注釋吧.

『捌』 如何配置go語言開發環境

1、下載go的zip文件。並且一定要把文件解壓到c:\go目錄下。
2、配置windows的高級環境變數。包括:GOROOT、GOOS、GOBIN、GOARCH。並且在path變數裡面把c:\go\bin加入。以便可以在命令行直接運行go命令。
舉例:我的機器:
GOPATH= c:\go;c:\go\src;F:\workspace\goSample01;
GOBIN=c:\go\bin;F:\workspace\goSample01\bin;
其中,c:\go是go的安裝路徑;
F:\workspace\goSample01是我寫的go語言項目的工程目錄;
F:\workspace\goSample01\bin是go語言項目的工程目錄下的可執行文件路徑;

3、在完成環境變數配置後,打開一個命令行窗口,直接輸入go,然後回車,看看是否出現go的幫助信息。如果出現,那麼go的基本環境就OK了。
注意:這個基本環境不包含開發工具,也不能直接編譯帶C代碼的go程序。
4、(可選)為了支持Import遠程包,最好裝個gomingw。下載地址:http://code.google.com/p/gomingw/downloads/list。如果下的是壓縮包,請把它解壓到C盤。例如,C:\gowin-env。裡面有個Console.bat是以後使用go get的環境。舉例:有個文件a.go,裡面import(
"fmt"
"github.com/astaxie/beedb"
_ "github.com/ziutek/mymysql/godrv"
為了編譯該a.go文件,需要啟動Console.bat,然後在該命令行窗口,進入c:\go\src目錄下,執行go getgithub.com/astaxie/beedb
Go get github.com/ziutek/mymysql/godrv .
Go會自動下載該遠程包並編譯和安裝這些包。
配置goclipse(可選)
(如果不喜歡eclipse開發工具,請跳過這個配置。)
1、下載並安裝goclipse插件。Goclipse是go語言for eclipse的插件,下載地址:http://code.google.com/p/goclipse/
2、啟動eclipse並創建go項目。然後寫個最簡單的helloworld.go文件,並運行。代碼如下:
packagemainimport"fmt"func main(){ fmt.Printf("hello, world")}
配置gocode(可選)
如果不需要go語法輔助和eclipse裡面的(按ALT+/)彈出go語言自動輔助功能,請跳過這個配置。
1、下載gocode的zip文件,解壓後放在go的bin目錄下。
2、下載並安裝Git軟體。並且在path裡面配置git的執行路徑。例如c:\git\bin
3、在命令行執行:go build .\gocode。如果一切正常,那麼將會編譯生成一個gocode.exe文件在go的bin目錄下。如果編譯失敗,那麼就轉第4步。
4、如果第3步直接編譯gocode源文件成功,那就直接到第5步。否則,就需要通過git下載gocode源文件,然後再編譯。在命令行執行:go get -u github.com/nsf/gocode 。就會生成gocode.exe文件。
5、在goclipse插件裡面指定gocode的路徑。就可以在elcipse裡面調用gocode來幫助寫編碼了。
從開發工具這塊看,go語言還不夠成熟,開發工具都還不完善,有待改進。
下載go-tour教程源代碼(可選)
Google有個在線運行go語言的教程(http://tour.golang.org/#2),很不錯。支持在web上直接運行大部分的go程序,想了解這個教程的源代碼的朋友可以通過以下方式獲取。如果沒興趣,可以跳過這個步驟。

1、下載安裝Mercurial軟體。
2、在命令行下輸入:
hg clone http://[email protected]/r/qinhui99-go-tour/
http://[email protected]/r/qinhui99-go-tour/這個URL是我從google的go-tour源代碼的一個clone。作為測試用的。如果把http改成https協議,下載就會失敗。搞不懂。

編譯帶調用C代碼的go文件(可選)

1、為了在windows下編譯帶C代碼的go程序,你首先需要下載並安裝MinGW或者Cygwin。
2、首選安裝MinGW。在安裝MinGW之後,記得要把MinGW安裝目錄\bin路徑設置在path環境變數裡面,以便能在dos窗口下直接調用gcc。
3、下載一個gowin-env。下載地址:gowin-env。下載後解壓到某個目錄下,例如:C:\gowin-env. 然後,編輯go-env.bat。配置相關的go參數。例如,我的配置是:
set GOARCH=386
set GOOS=windows
set GOROOT=c:\go
set GOBIN=%GOROOT%\bin
set GOPATH=%GOROOT%;F:\workspace\goSample01;
設置好go-env.bat後,就可以點擊Console.bat來啟動編譯和運行窗口。

4、編寫一個帶C代碼的go程序。例如,testc.go
5、編譯
例如:
go build -compiler gccgo test_c.go

運行調用C代碼的go文件(可選)
1、testc.go.
創建rand目錄,然後在rand裡面創建testc.go. 代碼如下:
package rand
/*
//
#include <stdio.h>
*/
import "C"
func PrintHello() {
C.puts(C.CString("Hello, world\n"))
}
2、a.go
在rand下創建a.go.代碼如下:
package rand
import "fmt"
func SayHello(name string){
fmt.Println(name)
}
3、test_import.go
在rand的上一級創建test_import.go。代碼如下:
package main

import "./rand"

func main(){
rand.SayHello("tom")
rand.PrintHello()
}

4、運行test_import.go
go run test_import.go

在測試其它幾個C代碼的時候,發現windows版本的cgo還有些編譯問題,同樣的代碼轉移到蘋果的XCODE下就沒有問題。後來終於發現原因了,原來有些例子是unix平台下的,而在windows平台下,方法名和參數需要做調整。
例如:下面代碼在windows下編譯報一堆錯誤。
package rand
/*
#include <stdlib.h>
*/
import "C"

func Random() int {
return int(C.random())
}

func Seed(i int) {
C.srandom(C.uint(i))
}
這里需要把return int(C.random()) 修改為「return int(C.rand())」
C.srandom(C.uint(i))修改為「C.srand(C.uint(i))」編譯就OK了。

『玖』 windows 怎麼編譯 go語言

1、解壓壓縮包到go工作目錄,如解壓到E:\opensource\go\go,解壓後的目錄結構如下:

E:\opensource\go\go
├─api
├─bin
│ ├─go.exe
│ ├─godoc.exe
│ └─gofmt.exe
├─doc
├─include
├─lib
├─misc
├─pkg
├─src
└─test

2、增加環境變數GOROOT,取值為上面的go工作目錄
3、Path環境變數中添加";%GOROOT%\bin",以便能夠直接調用go命令來編譯go代碼,至此go編譯環境就配置好了
註:如果不想手動設置系統環境變數,也可下載go啟動環境批處理附件,
修改goenv.bat文件中的GOROOT值為上面的go工作目錄後直接雙擊該bat文件,go編譯環境變數即設置完成。
4、測試go編譯環境,啟動一個cmd窗口,直接輸入go,看到下面的提示就是搭建成功了

E:\opensource\go\go>go
Go is a tool for managing Go source code.

Usage:

go command [arguments]

The commands are:

build compile packages and dependencies
clean remove object files
doc run godoc on package sources
env print Go environment information
fix run go tool fix on packages
fmt run gofmt on package sources
get download and install packages and dependencies
install compile and install packages and dependencies
list list packages
run compile and run Go program
test test packages
tool run specified go tool
version print Go version
vet run go tool vet on packages

Use "go help [command]" for more information about a command.

Additional help topics:

gopath GOPATH environment variable
packages description of package lists
remote remote import path syntax
testflag description of testing flags
testfunc description of testing functions

Use "go help [topic]" for more information about that topic.

5、編譯helloworld測試程序,go語言包中test目錄帶有helloworld.go測試程序,源碼見"附一 helloworld.go",
直接調用"go build helloworld.go"就生成了"helloworld.exe"可執行程序,運行一下這個程序看到了我們期望的hello,wolrd。

E:\opensource\go\go\test>go build helloworld.go

E:\opensource\go\go\test>helloworld.exe
hello, world

E:\opensource\go\go\test>

附一 helloworld.go

// cmpout

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Test that we can do page 1 of the C book.

package main

func main() {
print("hello, world\n")
}

『拾』 golang生成的二進制可以反編譯嗎

和C/C++編譯的程序一樣,都是機器碼,如果你能反編譯C的就能反編譯Go的。
可以反編譯成匯編

閱讀全文

與golang編譯成c文件相關的資料

熱點內容
我的世界國際服為什麼登不進伺服器 瀏覽:994
微盟程序員老婆 瀏覽:928
intellij創建java 瀏覽:110
java連接odbc 瀏覽:38
啟動修復無法修復電腦命令提示符 瀏覽:359
手機編程是什麼 瀏覽:97
山東移動程序員 瀏覽:163
蘇州java程序員培訓學校 瀏覽:476
單片機液晶驅動 瀏覽:854
魔拆app里能拆到什麼 瀏覽:130
新預演算法的立法理念 瀏覽:144
wdcpphp的路徑 瀏覽:134
單片機p0口電阻 瀏覽:926
瀏覽器中調簡訊文件夾 瀏覽:594
五菱宏光空調壓縮機 瀏覽:68
為什麼app佔用幾百兆 瀏覽:680
自動解壓失敗叫我聯系客服 瀏覽:486
易語言新手源碼 瀏覽:458
oa伺服器必須有固定ip地址 瀏覽:46
傳奇源碼分析是什麼 瀏覽:271