導航:首頁 > 源碼編譯 > 工具鏈編譯c文件

工具鏈編譯c文件

發布時間:2022-01-24 01:43:53

㈠ arm-linux交叉編譯工具鏈中不能用庫文件

stdio.h ???
基本輸入輸出庫的頭文件???

大哥,你是不是除了 gcc ,別的都沒裝?
這個文件應該是 glibc 的開發部分自帶的頭文件。

遇到這個問題你可能:
1、gcc 有問題,沒有設置或者放錯了默認 C header搜索路徑。
2、header 放錯了位置,和 gcc 的設置不匹配。
3、你根本就沒裝。

㈡ LINUX交叉編譯工具鏈和GCC是什麼關系啊

編譯工具鏈一般最簡化的為
binutils
+
gcc
+
glibc
+
kernel-header
組合的環境。
GCC
就是編譯器,他的輸出每次安裝只能有針對一個架構的指令輸出。如果要多個架構輸出,那就要裝多個
GCC
,所以編譯工具鏈裡面會有一個
GCC

交叉編譯就是跨架構編譯,編譯出來的程序不能在本機執行(當然有例外情況)。所以這個時候就需要交叉編譯工具鏈。
工具鏈光有
GCC
是不行的,還需要一個
binutils
的二進制連接器,以及一個最基本的目標架構的
C
庫,C
庫還需要一個目標架構的內核源代碼才能完全工作(當然不是必須的,但編譯有的時候需要)
又因為
GCC
、binutils
不能實現單軟體同時多架構輸出,所以需要單獨另裝,又加上
C
庫和內核頭文件需要目標架構的東西而不能用本機本地架構的數據。
所以一個交叉編譯工具鏈就是針對目標架構准備的單獨安裝單獨使用的
binutils
+
gcc
+
glibc
+
kernel-header
的集合了。
PS:這個
kernel-header
並不一定就是
Linux
,他還可以是別的系統核心開發庫,比如
FreeBSD

㈢ arm-linux-gnueabihf交叉編譯工具鏈使用問題

與使用gcc或g++方法一樣,只是把命令替換成arm-linux-gnueabihf-gcc或arm-linux-gnueabihf-g++

例如
arm-linux-gnueabihf-gcc -g -o helloworld main.c

寫Makefile文件時也要注意命令的替換,舉例
CC=arm-linux-gnueabihf-gcc

helloworld : main.c

$(CC) -g -o helloworld main.c

㈣ arm-linux-gcc工具鏈:匯編文件如何include c的頭文件呢

按照樓上的帖子試了一下不行我是這樣寫的:a.h:#define
a
1a.S:.include
"a.h"mov
r0,#a然後用arm-linux-gcc
a.S
進行編譯,報錯:a.S:
Assembler
messages.S:3:
Error:
undefined
symbol
a
used
as
an
immediate
value問題出在哪裡呢???
查看原帖>>

㈤ 如何制定android交叉編譯工具鏈

經常搞嵌入式開發的朋友對於交叉編譯環境應該並不陌生,說白了,就是一組運行在x86 PC機的編譯工具,可以讓你在PC機上編譯出目標平台(例如ARM)可識別的二進制文件。Android平台也提供了這樣的交叉編譯工具鏈,就放在Android的NDK開發包的toolchains目錄下,因此,我們的Makefile文件中,只需給出相應的編譯工具即可。
廢話就先說到這,直接上例子,我們目標是把下面這個math.c文件編譯成一個靜態庫文件:
#include <stdio.h>
int add( int a , int b ) {
return a+b;
}
你需要編寫一個Makefile文件,這里假設你的Android ndk被安裝在 /opt/android/ndk 目錄下,當然,你可以根據自己的實際情況修改Makefile中相關路徑的定義,Makefile文件示例如下:
# Makefile Written by ticktick
# Show how to cross-compile c/c++ code for android platform
.PHONY: clean
NDKROOT=/opt/android/ndk
PLATFORM=$(NDKROOT)/platforms/android-14/arch-arm
CROSS_COMPILE=$(NDKROOT)/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-
CC=$(CROSS_COMPILE)gcc
AR=$(CROSS_COMPILE)ar
LD=$(CROSS_COMPILE)ld
CFLAGS = -I$(PWD) -I$(PLATFORM)/usr/include -Wall -O2 -fPIC -DANDROID -DHAVE_PTHREAD -mfpu=neon -mfloat-abi=softfp
LDFLAGS =
TARGET = libmath.a
SRCS = $(wildcard *.c)
OBJS = $(SRCS:.c=.o)
all: $(OBJS)
$(AR) -rc $(TARGET) $(OBJS)
clean:
rm -f *.o *.a *.so
這里不講Makefile文件的基本原理,只說明一下針對Android環境的Makefile文件編寫的注意事項。
(1) CROSS_COMPILE
必須正確給出Android NDK編譯工具鏈的路徑,當在目錄中執行make命令的時候,編譯系統會根據 CROSS_COMPILE 前綴尋找對應的編譯命令。
(2) -I$(PLATFORM)/usr/include
由於Android平台沒有使用傳統的c語言庫libc,而是自己編寫了一套更加高效更適合嵌入式平台的c語言庫,所以系統頭文件目錄不能再使用默認的路徑,必須直到Android平台的頭文件目錄
(3) -Wall -O2 -fPIC -DANDROID -DHAVE_PTHREAD -mfpu=neon -mfloat-abi=softfp
這些參數的意義網上基本上都有介紹,我就不一一解釋了,並不都是必須添加的,但比較常用。
編譯方法:
寫好makefile文件,並且保存之後,就可以直接在當前目錄下執行make命令,編譯完成後,當前目錄下會生成 libmath.a ,即可直接拿到Android的jni工程中和使用了。

㈥ C/C++源文件直接交叉編譯生成.so文件供安卓應用程序調用,可以嗎

Jni調用就行了,是要按規則寫介面api,如果介面很多,也沒法,那是你的業務問題,要重新設計業務邏輯。我們之前用的c++單獨交叉編譯一個進程,和安卓界面用tcp通信,如果介面多也以為著協議多,一樣的。

㈦ arm-linux-gcc 交叉工具鏈可以直接在linux上編譯生成STM32(Cotex-M3內核)的程序嗎跪求高手現身。

看你的編譯器,但是 M3 這個內核比較新,在舊版本的 gcc 上會沒有針對這個 CPU 的支持。
M3 好像有部分指令不支持,如果你的編譯器不支持,編譯出來的程序會不能正常運行。
這東西不是隨便找個幾百年前的東西,就能支持新硬體的。
你看看你的 gcc 到底支持什麼 CPU 吧……

gcc-4.8.1 反正支持如下 arm CPU 和核心。
-mcpu=name
This specifies the name of the target ARM processor. GCC uses this name to determine what kind of instructions it can emit when generating assembly code. Permissible names are: 『arm2』, 『arm250』, 『arm3』, 『arm6』, 『arm60』, 『arm600』, 『arm610』, 『arm620』, 『arm7』, 『arm7m』, 『arm7d』, 『arm7dm』, 『arm7di』, 『arm7dmi』, 『arm70』, 『arm700』, 『arm700i』, 『arm710』, 『arm710c』, 『arm7100』, 『arm720』, 『arm7500』, 『arm7500fe』, 『arm7tdmi』, 『arm7tdmi-s』, 『arm710t』, 『arm720t』, 『arm740t』, 『strongarm』, 『strongarm110』, 『strongarm1100』, 『strongarm1110』, 『arm8』, 『arm810』, 『arm9』, 『arm9e』, 『arm920』, 『arm920t』, 『arm922t』, 『arm946e-s』, 『arm966e-s』, 『arm968e-s』, 『arm926ej-s』, 『arm940t』, 『arm9tdmi』, 『arm10tdmi』, 『arm1020t』, 『arm1026ej-s』, 『arm10e』, 『arm1020e』, 『arm1022e』, 『arm1136j-s』, 『arm1136jf-s』, 『mpcore』, 『mpcorenovfp』, 『arm1156t2-s』, 『arm1156t2f-s』, 『arm1176jz-s』, 『arm1176jzf-s』, 『cortex-a5』, 『cortex-a7』, 『cortex-a8』, 『cortex-a9』, 『cortex-a15』, 『cortex-r4』, 『cortex-r4f』, 『cortex-r5』, 『cortex-m4』, 『cortex-m3』, 『cortex-m1』, 『cortex-m0』, 『cortex-m0plus』, 『marvell-pj4』, 『xscale』, 『iwmmxt』, 『iwmmxt2』, 『ep9312』, 『fa526』, 『fa626』, 『fa606te』, 『fa626te』, 『fmp626』, 『fa726te』.
-mcpu=generic-arch is also permissible, and is equivalent to -march=arch -mtune=generic-arch. See -mtune for more information.
-mcpu=native causes the compiler to auto-detect the CPU of the build computer. At present, this feature is only supported on Linux, and not all architectures are recognized. If the auto-detect is unsuccessful the option has no effect.

㈧ 標准C程序如何移植到android平台需要什麼編譯參數,我用的是arm-eabi-gcc工具鏈

首先 你編譯的程序 用cat命令看 目錄應該是/lib/libc.so.6 而Android 是 /system/lib/libc.so
本來已經有C庫了 但是 我這里沒有用~ 你可以在 你的PC安裝機子上找到 交叉編譯arm-eabi-gcc或 arm-linux-gcc安裝目錄下的arm/4.3.2/..../libc/lib/libc2.8.so好像 是這個 有一個是libc.so.6 這個是一個連接 不是文件 查看屬性 看下連接的文件應該是 那個libc2.8.so (放心它是arm版的)拷貝這個文件到 安卓/system/lib/去 然後
用RE文件 為它添加一個 連接 /system/lib/libc.so.6 就可以了
這樣 標准庫是被移植去了 但是 你的應用程序 有可能使用的是 /lib/libc.so.6 不是 /system/lib/libc.so.6
先測試不行的話 就把 /system/lib 連接為/lib

閱讀全文

與工具鏈編譯c文件相關的資料

熱點內容
phpsql單引號 瀏覽:84
英雄聯盟壓縮壁紙 瀏覽:450
辦公app需要什麼伺服器 瀏覽:626
安卓伺服器怎麼獲得 瀏覽:806
空調壓縮機冷媒的作用 瀏覽:779
淘寶app是以什麼為利的 瀏覽:655
java提取圖片文字 瀏覽:922
我的世界手機版指令復制命令 瀏覽:33
java判斷字元串為數字 瀏覽:924
androidrpc框架 瀏覽:488
雲伺服器essd和ssd 瀏覽:522
家用網關的加密方式 瀏覽:1
怎麼從ppt導出pdf文件 瀏覽:971
換汽車空調壓縮機軸承 瀏覽:845
平板怎麼登錄安卓端 瀏覽:195
圖像拼接計演算法 瀏覽:255
怎麼打開飢荒伺服器的本地文件夾 瀏覽:291
usb掃描槍編程 瀏覽:673
博易大師手機app叫什麼 瀏覽:663
刮眼影盤解壓方法 瀏覽:966