编码识别-使用gcc在linux中编译google/compact_enc_det

compact_enc_det是google的开源编码检测项目,开源与github:

https://github.com/google/compact_enc_det.git

compact_enc_det可以用来检测给定的文本文件的编码类型,支持多种类型的文本:

enum TextCorpusType {
  WEB_CORPUS,
  XML_CORPUS,
  QUERY_CORPUS,       // Use this for vanilla plaintext
  EMAIL_CORPUS,
  NUM_CORPA,          // always last
};

其主要的检测编码的方法描述如下:

Encoding DetectEncoding(
      const char* text, int text_length, const char* url_hint,
      const char* http_charset_hint, const char* meta_charset_hint,
      const int encoding_hint,
      const Language language_hint,  // User interface lang
      const TextCorpusType corpus_type, bool ignore_7bit_mail_encodings,
      int* bytes_consumed, bool* is_reliable);
在linux上将这个 项目编译成 动态链接库的步骤如下:

1. 下载代码:git clone ht

hqyj@ubuntu:~$ echo $ PATH $ PATH hqyj@ubuntu:~$ find / -path "*usr/bin/*-linux-*" 2>/dev/null | grep gcc /usr/bin/x86_64-linux-gnu-gcc-nm /usr/bin/x86_64-linux-gnu-gcc /usr/bin/x86_64-linux-gnu-gcc-ranlib /usr/bin/x86_64-linux-gnu-gcc-9 /usr/bin/x86_64-linux-gnu-gcc-ranlib-9 /usr/bin/x86_64-linux-gnu-gcc-ar-9 /usr/bin/x86_64-linux-gnu-gcc-ar /usr/bin/x86_64-linux-gnu-gcc-nm-9 /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux/arm-ostl-linux-gcc-ranlib /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux/arm-ostl-linux-gcc-ar /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux/arm-ostl-linux-gcc-nm /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux/arm-ostl-linux-gcc /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-gnueabi/arm-ostl-linux-gnueabi-gcc-ranlib /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-gnueabi/arm-ostl-linux-gnueabi-gcc /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-gnueabi/arm-ostl-linux-gnueabi-gcc-ar /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-gnueabi/arm-ostl-linux-gnueabi-gcc-nm /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musleabi/arm-ostl-linux-musleabi-gcc-ar /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musleabi/arm-ostl-linux-musleabi-gcc-ranlib /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musleabi/arm-ostl-linux-musleabi-gcc /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musleabi/arm-ostl-linux-musleabi-gcc-nm /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musl/arm-ostl-linux-musl-gcc-ranlib /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musl/arm-ostl-linux-musl-gcc /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musl/arm-ostl-linux-musl-gcc-nm /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musl/arm-ostl-linux-musl-gcc-ar /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux/arm-ostl-linux-gcc-ranlib /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux/arm-ostl-linux-gcc-ar /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux/arm-ostl-linux-gcc-nm /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux/arm-ostl-linux-gcc /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-gnueabi/arm-ostl-linux-gnueabi-gcc-ranlib /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-gnueabi/arm-ostl-linux-gnueabi-gcc /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-gnueabi/arm-ostl-linux-gnueabi-gcc-ar /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-gnueabi/arm-ostl-linux-gnueabi-gcc-nm /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musleabi/arm-ostl-linux-musleabi-gcc-ar /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musleabi/arm-ostl-linux-musleabi-gcc-ranlib /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musleabi/arm-ostl-linux-musleabi-gcc /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musleabi/arm-ostl-linux-musleabi-gcc-nm /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musl/arm-ostl-linux-musl-gcc-ranlib /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musl/arm-ostl-linux-musl-gcc /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musl/arm-ostl-linux-musl-gcc-nm /opt/st/fsmp1a/3.1-snapshot/sysroots/x86_64-ostl_sdk-linux/usr/bin/arm-ostl-linux-musl/arm-ostl-linux-musl-gcc-ar hqyj@ubuntu:~$
最新发布
07-18
<think>我们正在寻找系统中已安装的交叉编译工具链,特别是GCC的路径。根据引用[1][2][3][4],交叉编译工具链通常安装在特定目录,并且可以通过环境变量或搜索系统路径来找到。以下是步骤: 1. **检查环境变量**:交叉编译工具链的路径通常会被添加到`PATH`环境变量中。我们可以通过`echo $PATH`查看,并从中寻找包含交叉编译工具链的目录(如`/usr/bin`,`/usr/local/bin`,或用户自定义的路径)。 2. **使用`which`或`whereis`命令**:如果我们知道交叉编译工具链的前缀(如`arm-linux-gnueabihf-`,`aarch64-linux-gnu-`等),我们可以使用`which`或`whereis`命令来查找具体路径。 3. **搜索常见位置**:交叉编译工具链通常安装在以下目录: - `/usr/bin` - `/usr/local/bin` - `/opt`下的子目录(如`/opt/toolchains`) - 用户主目录下的某个目录(如`~/toolchains`) 4. **使用`find`命令搜索**:如果我们不知道具体的前缀,我们可以搜索包含特定字符串(如`linux-gnu`,`linux-gnueabi`等)的可执行文件。 具体步骤: ### 1. 查看环境变量 ```bash echo $PATH ``` 在输出的路径中,注意是否有包含交叉编译工具链的目录(例如:`/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin`)。 ### 2. 尝试已知的常见前缀 常见的交叉编译工具链前缀有: - `arm-linux-gnueabi-`(32位ARM,软浮点) - `arm-linux-gnueabihf-`(32位ARM,硬浮点) - `aarch64-linux-gnu-`(64位ARM) - `mips-linux-gnu-` - 等等 我们可以使用以下命令查找这些工具是否存在: ```bash # 例如查找32位ARM的交叉编译器 which arm-linux-gnueabihf-gcc # 或者 whereis arm-linux-gnueabihf-gcc ``` ### 3. 搜索整个系统(如果以上方法没有找到) 如果不知道前缀,我们可以搜索包含`gcc`和`linux`的可执行文件: ```bash # 在/usr/bin目录下搜索 find /usr/bin -name "*-linux-*-gcc" # 在整个系统搜索(需要sudo权限,因为有些目录需要权限) sudo find / -name "*-linux-*-gcc" 2>/dev/null ``` 注意:`2>/dev/null`是为了忽略权限拒绝等错误信息。 ### 4. 检查工具链的安装路径 如果之前是通过包管理器安装的,可以使用`dpkg`来查找: ```bash # 例如,查找所有包含arm-linux-gnueabihf-gcc的包 dpkg -L gcc-arm-linux-gnueabihf | grep bin/arm-linux-gnueabihf-gcc ``` ### 5. 检查用户主目录下的工具链 很多情况下,交叉编译工具链被解压到用户主目录下的某个目录,例如: ```bash find ~ -name "*-gcc" -type f -executable ``` ### 示例输出 如果找到了交叉编译器,输出可能类似于: ``` /usr/bin/arm-linux-gnueabihf-gcc /opt/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc ``` ### 总结步骤 1. 先尝试已知前缀的`which`命令。 2. 搜索常见目录(如`/usr/bin`,`/usr/local/bin`,`/opt`)。 3. 使用`find`命令在整个系统搜索(注意权限)。 ### 相关问题 1. 如何将找到的交叉编译工具链路径添加到环境变量?[^1][^2] 2. 交叉编译工具链的常见前缀有哪些?[^3][^4] 3. 如何验证交叉编译工具链是否可用?[^4]</think>### 查看Ubuntu系统中交叉编译工具链路径的完整方法 #### 1. **检查环境变量中的路径** ```bash # 查看PATH环境变量中的工具链路径 echo $PATH | tr ':' '\n' | grep -E "bin|gcc|arm|aarch" # 检查常用环境变量 echo "CROSS_COMPILE路径: ${CROSS_COMPILE:-未设置}" echo "TOOLCHAIN路径: ${TOOLCHAIN_PATH:-未设置}" ``` 环境变量是最直接的配置方式,交叉编译工具链通常通过`PATH`、`CROSS_COMPILE`或`TOOLCHAIN_PATH`设置[^1][^2]。 #### 2. **搜索常见安装位置** ```bash # 搜索系统级安装路径 find /usr/bin /usr/local/bin /opt -name "*-gcc" 2>/dev/null # 搜索ARM架构工具链(常见嵌入式平台) find / -path "*/bin/*-linux-*gcc" 2>/dev/null | grep -E "arm|aarch" ``` 典型安装位置包括: - `/usr/bin`(系统默认) - `/usr/local/bin`(用户级安装) - `/opt`(第三方工具链) - `~/toolchains`(用户自定义路径)[^2][^3] #### 3. **通过编译器命令反查路径** ```bash # 使用which定位已知编译器 which arm-linux-gnueabihf-gcc 2>/dev/null which aarch64-linux-gnu-gcc 2>/dev/null # 查看符号链接实际路径 ls -l $(which arm-linux-gnueabihf-gcc) 2>/dev/null ``` 如果知道工具链前缀(如`arm-linux-gnueabihf-`),可直接定位[^3][^4]。 #### 4. **检查包管理器安装记录** ```bash # 检查apt安装的工具链 dpkg -L gcc-arm-linux-gnueabihf 2>/dev/null | grep bin/ dpkg -L gcc-aarch64-linux-gnu 2>/dev/null # 检查Buildroot生成工具链 find ~/buildroot/output/ -name "*gcc" 2>/dev/null ``` 通过包管理器安装的工具链可通过`dpkg`查询[^4]。 #### 5. **识别工具链类型** 找到路径后,确认工具链架构: ```bash # 查看编译器目标平台 /path/to/toolchain/arm-linux-gnueabihf-gcc -dumpmachine # 输出示例: arm-linux-gnueabihf → ARM32架构 # 输出示例: aarch64-linux-gnu → ARM64架构 ``` #### 示例输出分析 成功找到工具链路径后: ``` /usr/bin/arm-linux-gnueabihf-gcc → 系统级安装(标准位置) /opt/gcc-linaro-7.5.0/bin/arm-linux-gnueabihf-gcc → 自定义安装 ~/toolchains/aarch64/bin/aarch64-linux-gnu-gcc → 用户目录安装 ``` ### 常见工具链路径规律 | 架构类型 | 典型路径模式 | 编译器前缀示例 | |----------------|----------------------------------|---------------------------| | ARM32 | `*/bin/arm-linux-gnueabihf-gcc` | `arm-linux-gnueabihf-*` | | ARM64 | `*/bin/aarch64-linux-gnu-gcc` | `aarch64-linux-gnu-*` | | MIPS | `*/bin/mips-linux-gnu-gcc` | `mips-linux-gnu-*` | | RISC-V | `*/bin/riscv64-unknown-linux-gcc`| `riscv64-unknown-linux-*` |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值