Linux編譯安裝相關(guān)命令,下面以Linux安裝MySQL工具為例進(jìn)行說(shuō)明,代碼如下:
創(chuàng)新互聯(lián)網(wǎng)站建設(shè)提供從項(xiàng)目策劃、軟件開(kāi)發(fā),軟件安全維護(hù)、網(wǎng)站優(yōu)化(SEO)、網(wǎng)站分析、效果評(píng)估等整套的建站服務(wù),主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作,app軟件開(kāi)發(fā)公司以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。創(chuàng)新互聯(lián)深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
1、測(cè)試環(huán)境在Linux MySQL下進(jìn)行,版本系統(tǒng)為CentOS5,以下為相關(guān)軟件:
mysql-5.1.30
memcached-1.2.6
libevent-1.4.7-stable
memcached_functions_mysql-0.8
libmemcached-0.26
2、編譯安裝Linux MySQL
[root@localhost?~]#tar?xzf?mysql-5.1.30.tar_001.gz??
[root@localhost?~]#cd?mysql-5.1.30??
[root@localhost?~]#./configure?--prefix=/usr/local/mysql51??
[root@localhost?~]#make??
[root@localhost?~]#make?install??
[root@localhost?~]#./scripts/mysql_install_db?--user=mysql?--skip-name-resolve??
[root@localhost?~]#/usr/local/mysql51/bin/mysqld_safe?
#連接符這是放入后臺(tái),是前一個(gè)正確執(zhí)行,才會(huì)執(zhí)行后一個(gè)
#Linux編譯安裝流程./configure??make??make?install(默認(rèn)目錄安裝)
#./configure?--prefix=/usr/local/pcre??make??make?install(指定安裝目錄)
首先uname -r看一下你當(dāng)前的linux內(nèi)核版本
1、linux的源碼是在/usr/src這個(gè)目錄下,此目錄有你電腦上各個(gè)版本的linux內(nèi)核源代碼,用uname -r命令可以查看你當(dāng)前使用的是哪套內(nèi)核,你把你下載的內(nèi)核源碼也保存到這個(gè)目錄之下。
2、配置內(nèi)核 make menuconfig,根據(jù)你的需要來(lái)進(jìn)行選擇,設(shè)置完保存之后會(huì)在當(dāng)前目錄下生成.config配置文件,以后的編譯會(huì)根據(jù)這個(gè)來(lái)有選擇的編譯。
3、編譯,依次執(zhí)行make、make bzImage、make modules、make modules
4、安裝,make install
5、.創(chuàng)建系統(tǒng)啟動(dòng)映像,到 /boot 目錄下,執(zhí)行 mkinitramfs -o initrd.img-2.6.36 2.6.36
6、修改啟動(dòng)項(xiàng),因?yàn)槟阍趩?dòng)的時(shí)候會(huì)出現(xiàn)多個(gè)內(nèi)核供你選擇,此事要選擇你剛編譯的那個(gè)版本,如果你的電腦沒(méi)有等待時(shí)間,就會(huì)進(jìn)入默認(rèn)的,默認(rèn)的那個(gè)取決于 /boot/grub/grub.cfg 文件的設(shè)置,找到if [ "${linux_gfx_mode}" != "text" ]這行,他的第一個(gè)就是你默認(rèn)啟動(dòng)的那個(gè)內(nèi)核,如果你剛編譯的內(nèi)核是在下面,就把代表這個(gè)內(nèi)核的幾行代碼移到第一位如:
menuentry 'Ubuntu, with Linux 3.2.0-35-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 9961c170-2566-41ac-8155-18f231c1bea5
linux/boot/vmlinuz-3.2.0-35-generic root=UUID=9961c170-2566-41ac-8155-18f231c1bea5 ro quiet splash $vt_handoff
initrd/boot/initrd.img-3.2.0-35-generic
}
當(dāng)然你也可以修改 set default="0"來(lái)決定用哪個(gè),看看你的內(nèi)核在第幾位,default就填幾,不過(guò)我用過(guò)這種方法,貌似不好用。
重啟過(guò)后你編譯的內(nèi)核源碼就成功地運(yùn)行了,如果出現(xiàn)問(wèn)題,比如鼠標(biāo)不能用,usb不識(shí)別等問(wèn)題就好好查查你的make menuconfig這一步,改好后就萬(wàn)事ok了。
最后再用uname -r看看你的linux內(nèi)核版本。是不是你剛下的那個(gè)呢!有沒(méi)有成就感?
打字不易,如滿意,望采納。
編譯安裝內(nèi)核
下載并解壓內(nèi)核
解壓內(nèi)核:tar xf linux-2.6.XX.tar.xz
定制內(nèi)核:make menuconfig
參見(jiàn)makefile menuconfig過(guò)程講解
編譯內(nèi)核和模塊:make
生成內(nèi)核模塊和vmlinuz,initrd.img,Symtem.map文件
安裝內(nèi)核和模塊:sudo make modules_install install
復(fù)制模塊文件到/lib/modules目錄下、復(fù)制config,vmlinuz,initrd.img,Symtem.map文件到/boot目錄、更新grub
其他命令:
make mrprobe:命令的作用是在每次配置并重新編譯內(nèi)核前需要先執(zhí)行“make mrproper”命令清理源代碼樹(shù),包括過(guò)去曾經(jīng)配置的內(nèi)核配置文件“.config”都將被清除。即進(jìn)行新的編譯工作時(shí)將原來(lái)老的配置文件給刪除到,以免影響新的內(nèi)核編譯。
make dep:生成內(nèi)核功能間的依賴關(guān)系,為編譯內(nèi)核做好準(zhǔn)備。
幾個(gè)重要的Linux內(nèi)核文件介紹
config
使用make menuconfig 生成的內(nèi)核配置文件,決定將內(nèi)核的各個(gè)功能系統(tǒng)編譯進(jìn)內(nèi)核還是編譯為模塊還是不編譯。
vmlinuz 和 vmlinux
vmlinuz是可引導(dǎo)的、壓縮的內(nèi)核,“vm”代表“Virtual Memory”。Linux 支持虛擬內(nèi)存,不像老的操作系統(tǒng)比如DOS有640KB內(nèi)存的限制,Linux能夠使用硬盤(pán)空間作為虛擬內(nèi)存,因此得名“vm”。vmlinuz是可執(zhí)行的Linux內(nèi)核,vmlinuz的建立有兩種方式:一是編譯內(nèi)核時(shí)通過(guò)“make zImage”創(chuàng)建,zImage適用于小內(nèi)核的情況,它的存在是為了向后的兼容性;二是內(nèi)核編譯時(shí)通過(guò)命令make bzImage創(chuàng)建,bzImage是壓縮的內(nèi)核映像,需要注意,bzImage不是用bzip2壓縮的,bzImage中的bz容易引起誤解,bz表示“big zImage”,bzImage中的b是“big”意思。 zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip壓縮的。它們不僅是一個(gè)壓縮文件,而且在這兩個(gè)文件的開(kāi)頭部分內(nèi)嵌有g(shù)zip解壓縮代碼,所以你不能用gunzip 或 gzip –dc解包vmlinuz。 內(nèi)核文件中包含一個(gè)微型的gzip用于解壓縮內(nèi)核并引導(dǎo)它。兩者的不同之處在于,老的zImage解壓縮內(nèi)核到低端內(nèi)存(第一個(gè)640K),bzImage解壓縮內(nèi)核到高端內(nèi)存(1M以上)。如果內(nèi)核比較小,那么可以采用zImage 或bzImage之一,兩種方式引導(dǎo)的系統(tǒng)運(yùn)行時(shí)是相同的。大的內(nèi)核采用bzImage,不能采用zImage。 vmlinux是未壓縮的內(nèi)核,vmlinuz是vmlinux的壓縮文件。
initrd.img
initrd是“initial ramdisk”的簡(jiǎn)寫(xiě)。initrd一般被用來(lái)臨時(shí)的引導(dǎo)硬件到實(shí)際內(nèi)核vmlinuz能夠接管并繼續(xù)引導(dǎo)的狀態(tài)。比如initrd- 2.4.7-10.img主要是用于加載ext3等文件系統(tǒng)及scsi設(shè)備的驅(qū)動(dòng)。如果你使用的是scsi硬盤(pán),而內(nèi)核vmlinuz中并沒(méi)有這個(gè) scsi硬件的驅(qū)動(dòng),那么在裝入scsi模塊之前,內(nèi)核不能加載根文件系統(tǒng),但scsi模塊存儲(chǔ)在根文件系統(tǒng)的/lib/modules下。為了解決這個(gè)問(wèn)題,可以引導(dǎo)一個(gè)能夠讀實(shí)際內(nèi)核的initrd內(nèi)核并用initrd修正scsi引導(dǎo)問(wèn)題,initrd-2.4.7-10.img是用gzip壓縮的文件。initrd映象文件是使用mkinitrd創(chuàng)建的,mkinitrd實(shí)用程序能夠創(chuàng)建initrd映象文件,這個(gè)命令是RedHat專有的,其它Linux發(fā)行版或許有相應(yīng)的命令。這是個(gè)很方便的實(shí)用程序。具體情況請(qǐng)看幫助:man mkinitrd
System.map是一個(gè)特定內(nèi)核的內(nèi)核符號(hào)表,由“nm vmlinux”產(chǎn)生并且不相關(guān)的符號(hào)被濾出。
下面幾行來(lái)自/usr/src/linux-2.4/Makefile:
nm vmlinux | grep -v '(compiled)|(.o$$)|( [aUw] )|(..ng$$)|(LASH[RL]DI)' | sort System.map
在進(jìn)行程序設(shè)計(jì)時(shí),會(huì)命名一些變量名或函數(shù)名之類(lèi)的符號(hào)。Linux內(nèi)核是一個(gè)很復(fù)雜的代碼塊,有許許多多的全局符號(hào), Linux內(nèi)核不使用符號(hào)名,而是通過(guò)變量或函數(shù)的地址來(lái)識(shí)別變量或函數(shù)名,比如不是使用size_t BytesRead這樣的符號(hào),而是像c0343f20這樣引用這個(gè)變量。 對(duì)于使用計(jì)算機(jī)的人來(lái)說(shuō),更喜歡使用那些像size_t BytesRead這樣的名字,而不喜歡像c0343f20這樣的名字。內(nèi)核主要是用c寫(xiě)的,所以編譯器/連接器允許我們編碼時(shí)使用符號(hào)名,而內(nèi)核運(yùn)行時(shí)使用地址。 然而,在有的情況下,我們需要知道符號(hào)的地址,或者需要知道地址對(duì)應(yīng)的符號(hào),這由符號(hào)表來(lái)完成,符號(hào)表是所有符號(hào)連同它們的地址的列表。
Linux 符號(hào)表使用到2個(gè)文件: /proc/ksyms 、System.map 。/proc/ksyms是一個(gè)“proc file”,在內(nèi)核引導(dǎo)時(shí)創(chuàng)建。實(shí)際上,它并不真正的是一個(gè)文件,它只不過(guò)是內(nèi)核數(shù)據(jù)的表示,卻給人們是一個(gè)磁盤(pán)文件的假象,這從它的文件大小是0可以看 出來(lái)。然而,System.map是存在于你的文件系統(tǒng)上的實(shí)際文件。當(dāng)你編譯一個(gè)新內(nèi)核時(shí),各個(gè)符號(hào)名的地址要發(fā)生變化,你的老的System.map 具有的是錯(cuò)誤的符號(hào)信息,每次內(nèi)核編譯時(shí)產(chǎn)生一個(gè)新的System.map,你應(yīng)當(dāng)用新的System.map來(lái)取代老的System.map。
雖然內(nèi)核本身并不真正使用System.map,但其它程序比如klogd, lsof和ps等軟件需要一個(gè)正確的System.map。如果你使用錯(cuò)誤的或沒(méi)有System.map,klogd的輸出將是不可靠的,這對(duì)于排除程序故障會(huì)帶來(lái)困難。沒(méi)有System.map,你可能會(huì)面臨一些令人煩惱的提示信息。 另外少數(shù)驅(qū)動(dòng)需要System.map來(lái)解析符號(hào),沒(méi)有為你當(dāng)前運(yùn)行的特定內(nèi)核創(chuàng)建的System.map它們就不能正常工作。 Linux的內(nèi)核日志守護(hù)進(jìn)程klogd為了執(zhí)行名稱-地址解析,klogd需要使用System.map。System.map應(yīng)當(dāng)放在使用它的軟件能夠找到它的地方。執(zhí)行:man klogd可知,如果沒(méi)有將System.map作為一個(gè)變量的位置給klogd,那么它將按照下面的順序,在三個(gè)地方查找System.map: /boot/System.map 、/System.map 、/usr/src/linux/System.map
System.map也有版本信息,klogd能夠智能地查找正確的映象(map)文件。
makefile menuconfig過(guò)程講解
當(dāng)我們?cè)趫?zhí)行make menuconfig這個(gè)命令時(shí),系統(tǒng)到底幫我們做了哪些工作呢?這里面一共涉及到了一下幾個(gè)文件我們來(lái)一一探討
Linux內(nèi)核根目錄下的scripts文件夾
arch/$ARCH/Kconfig文件、各層目錄下的Kconfig文件
Linux內(nèi)核根目錄下的makefile文件、各層目錄下的makefile文件
Linux內(nèi)核根目錄下的的.config文件、arch/$ARCH/configs/下的文件
Linux內(nèi)核根目錄下的 include/generated/autoconf.h文件
1)scripts文件夾存放的是跟make menuconfig配置界面的圖形繪制相關(guān)的文件,我們作為使用者無(wú)需關(guān)心這個(gè)文件夾的內(nèi)容
2)當(dāng)我們執(zhí)行make menuconfig命令出現(xiàn)上述藍(lán)色配置界面以前,系統(tǒng)幫我們做了以下工作:
首先系統(tǒng)會(huì)讀取arch/$ARCH/目錄下的Kconfig文件生成整個(gè)配置界面選項(xiàng)(Kconfig是整個(gè)linux配置機(jī)制的核心),那么ARCH環(huán)境變量的值等于多少呢?它是由linux內(nèi)核根目錄下的makefile文件決定的,在makefile下有此環(huán)境變量的定義:
SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
-e s/arm.*/arm/ -e s/sa110/arm/ \
-e s/s390x/s390/ -e s/parisc64/parisc/ \
-e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
-e s/sh[234].*/sh/ )
..........
export KBUILD_BUILDHOST := $(SUBARCH)
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
或者通過(guò) make ARCH=arm menuconfig命令來(lái)生成配置界面
比如教務(wù)處進(jìn)行考試,考試科數(shù)可能有外語(yǔ)、語(yǔ)文、數(shù)學(xué)等科,這里我們選擇了arm科可進(jìn)行考試,系統(tǒng)就會(huì)讀取arm/arm/kconfig文件生成配置選項(xiàng)(選擇了arm科的卷子),系統(tǒng)還提供了x86科、milps科等10幾門(mén)功課的考試題
3)假設(shè)教務(wù)處比較“仁慈”,為了怕某些同學(xué)做錯(cuò)試題,還給我們準(zhǔn)備了一份參考答案(默認(rèn)配置選項(xiàng)),存放在arch/$ARCH/configs/目錄下,對(duì)于arm科來(lái)說(shuō)就是arch/arm/configs文件夾:
此文件夾中有許多選項(xiàng),系統(tǒng)會(huì)讀取哪個(gè)呢??jī)?nèi)核默認(rèn)會(huì)讀取linux內(nèi)核根目錄下.config文件作為內(nèi)核的默認(rèn)選項(xiàng)(試題的參考答案),我們一般會(huì)根據(jù)開(kāi)發(fā)板的類(lèi)型從中選取一個(gè)與我們開(kāi)發(fā)板最接近的系列到Linux內(nèi)核根目錄下(選擇一個(gè)最接近的參考答案)
4).config
假設(shè)教務(wù)處留了一個(gè)心眼,他提供的參考答案并不完全正確(.config文件與我們的板子并不是完全匹配),這時(shí)我們可以選擇直接修改.config文件然后執(zhí)行make menuconfig命令讀取新的選項(xiàng)。但是一般我們不采取這個(gè)方案,我們選擇在配置界面中通過(guò)空格、esc、回車(chē)選擇某些選項(xiàng)選中或者不選中,最后保存退出的時(shí)候,Linux內(nèi)核會(huì)把新的選項(xiàng)(正確的參考答案)更新到.config中,此時(shí)我們可以把.config重命名為其它文件保存起來(lái)(當(dāng)你執(zhí)行make distclean時(shí)系統(tǒng)會(huì)把.config文件刪除),以后我們?cè)倥渲脙?nèi)核時(shí)就不需要再去arch/arm/configs下考取相應(yīng)的文件了,省去了重新配置的麻煩,直接將保存的.config文件復(fù)制為.config即可.
5)經(jīng)過(guò)以上兩步,我們可以正確的讀取、配置我們需要的界面了,那么他們?nèi)绾胃鷐akefile文件建立編譯關(guān)系呢?當(dāng)你保存make menuconfig選項(xiàng)時(shí),系統(tǒng)會(huì)除了會(huì)自動(dòng)更新.config外,還會(huì)將所有的選項(xiàng)以宏的形式保存在Linux內(nèi)核根目錄下的 include/generated/autoconf.h文件下
內(nèi)核中的源代碼就都會(huì)包含以上.h文件,跟宏的定義情況進(jìn)行條件編譯。
當(dāng)我們需要對(duì)一個(gè)文件整體選擇如是否編譯時(shí),還需要修改對(duì)應(yīng)的makefile文件,例如:
我們選擇是否要編譯s3c2410_ts.c這個(gè)文件時(shí),makefile會(huì)根據(jù)CONFIG_TOUCHSCREEN_S3C2410來(lái)決定是編譯此文件,此宏是在Kconfig文件中定義,當(dāng)我們配置完成后,會(huì)出現(xiàn)在.config及autconf中,至此,我們就完成了整個(gè)linux內(nèi)核的編譯過(guò)程。
最后我們會(huì)發(fā)現(xiàn),整個(gè)linux內(nèi)核配置過(guò)程中,留給用戶的接口其實(shí)只有各層Kconfig、makefile文件以及對(duì)應(yīng)的源文件。
比如我們?nèi)绻胍o內(nèi)核增加一個(gè)功能,并且通過(guò)make menuconfig控制其聲稱過(guò)程
首先需要做的工作是:修改對(duì)應(yīng)目錄下的Kconfig文件,按照Kconfig語(yǔ)法增加對(duì)應(yīng)的選項(xiàng);
其次執(zhí)行make menuconfig選擇編譯進(jìn)內(nèi)核或者不編譯進(jìn)內(nèi)核,或者編譯為模塊,.config文件和autoconf.h文件會(huì)自動(dòng)生成;
最后修改對(duì)應(yīng)目錄下的makefile文件完成編譯選項(xiàng)的添加;
最后的最后執(zhí)行make命令進(jìn)行編譯。
Kconfig和Makefile
Linux內(nèi)核源碼樹(shù)的每個(gè)目錄下都有兩個(gè)文檔Kconfig和Makefile。分布到各目錄的Kconfig構(gòu)成了一個(gè)分布式的內(nèi)核配置數(shù)據(jù)庫(kù),每個(gè)Kconfig分別描述了所屬目錄源文檔相關(guān)的內(nèi)核配置菜單。在執(zhí)行內(nèi)核配置make menuconfig時(shí),從Kconfig中讀出菜單,用戶選擇后保存到.config的內(nèi)核配置文檔中。在內(nèi)核編譯時(shí),主Makefile調(diào)用這 個(gè).config,就知道了用戶的選擇。這個(gè)內(nèi)容說(shuō)明了,Kconfig就是對(duì)應(yīng)著內(nèi)核的每級(jí)配置菜單。
假如要想添加新的驅(qū)動(dòng)到內(nèi)核的源碼中,要修改Kconfig,這樣就能夠選擇這個(gè)驅(qū)動(dòng),假如想使這個(gè)驅(qū)動(dòng)被編譯,則要修改Makefile。添加新 的驅(qū)動(dòng)時(shí)需要修改的文檔有兩種(如果添加的只是文件,則只需修改當(dāng)前層Kconfig和Makefile文件;如果添加的是目錄,則需修改當(dāng)前層和目錄下 的共一對(duì)Kconfig和Makefile)Kconfig和Makefile。要想知道怎么修改這兩種文檔,就要知道兩種文檔的語(yǔ)法結(jié)構(gòu),Kconfig的語(yǔ)法參見(jiàn)參考文獻(xiàn)《【linux-2.6.31】kbuild》。
Makefile 文件包含 5 部分:
Makefile 頂層的 Makefile
.config 內(nèi)核配置文件
arch/$(ARCH)/Makefile 體系結(jié)構(gòu) Makefile
scripts/Makefile.* 適用于所有 kbuild Makefile 的通用規(guī)則等
kbuild Makefiles 大約有 500 個(gè)這樣的文件
頂層 Makefile 讀取內(nèi)核配置操作產(chǎn)生的.config 文件,頂層 Makefile 構(gòu)建兩個(gè)主要的目標(biāo):vmlinux(內(nèi)核映像)和 modules(所有模塊文件)。它通過(guò)遞歸訪問(wèn)內(nèi)核源碼樹(shù)下的子目錄來(lái)構(gòu)建這些目標(biāo)。訪問(wèn)哪些子目錄取決于內(nèi)核配置。頂層 Makefile 包含一個(gè)體系結(jié)構(gòu) Makefile,由 arch/$(ARCH)/Makefile 指定。體系結(jié)構(gòu) Makefile 文件為頂層 Makefile 提供了特定體系結(jié)構(gòu)的信息。每個(gè)子目錄各有一個(gè) kbuild文件和Makefile 文件來(lái)執(zhí)行從上層傳遞下來(lái)的命令。kbuild和Makefile文件利用.config 文件中的信息來(lái)構(gòu)造由 kbuild 構(gòu)建內(nèi)建或者模塊對(duì)象使用的各種文件列表。scripts/Makefile.*包含所有的定義/規(guī)則,等等。這些信息用于使用 kbuild和 Makefile 文件來(lái)構(gòu)建內(nèi)核。Makefile的語(yǔ)法參見(jiàn)參考文獻(xiàn)《【linux-2.6.31】kbuild》。
參考文獻(xiàn)
【linux-2.6.31】?jī)?nèi)核編譯指南.pdf
【linux-2.6.31】kbuild.pdf
Linker script in Linux.pdf
linux內(nèi)核的配置機(jī)制及其編譯過(guò)程
Linux內(nèi)核編譯過(guò)程詳解
Linux Kconfig及Makefile學(xué)習(xí)
在Linux下面,如果要編譯一個(gè)C語(yǔ)言源程序,我們要使用gcc編譯器。
先將源文件編譯成目標(biāo)文件:gcc - c hello.c
生成hello.o文件,再將目標(biāo)文件編譯成可執(zhí)行文件:gcc -o hello hello.o
如:
int main(int argc,char **argv)
{
printf("Hello Linux\n");
}
擴(kuò)展資料:
在使用GCC編譯器的時(shí)候,我們必須給出一系列必要的調(diào)用參數(shù)和文件名稱。GCC編譯器的調(diào)用參數(shù)大約有100多個(gè),這里只介紹其中最基本、最常用的參數(shù)。具體可參考GCC Manual。
GCC最基本的用法是∶gcc [options] [filenames]
其中options就是編譯器所需要的參數(shù),filenames給出相關(guān)的文件名稱。
參考資料:
百度百科_gcc
make clean僅僅是清除之前編譯的可執(zhí)行文件及配置文件
就是說(shuō)清除上次的make命令所產(chǎn)生的object文件(后綴為“.o”的文件)及可執(zhí)行文件《Linux就該這么學(xué)》有命令大全
當(dāng)前標(biāo)題:linux清理編譯命令 Linux清理命令
網(wǎng)頁(yè)路徑:http://jinyejixie.com/article46/dodhchg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、小程序開(kāi)發(fā)、定制網(wǎng)站、網(wǎng)站營(yíng)銷(xiāo)、靜態(tài)網(wǎng)站、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)