【问题标题】:How do I use custom assembler for clang?如何使用自定义汇编器进行铿锵声?
【发布时间】:2012-12-11 03:37:54
【问题描述】:

我已编译 clang 以将其用作 ARM 的交叉编译器(通过使用 ./configure --target=armv7l-unknown-linux-gnueabihf 对其进行配置),但是当我尝试编译任何 C 代码时,它会尝试使用 /usr/bin/as。我已经为 ARM 编译了 binutils,它们位于单独的目录中。如何指示 clang(或 llvm)使用我指定的汇编程序?

【问题讨论】:

  • 我知道我最近这样做了 - 让我看看我是否有配置文件。对于 ARM,它不应该使用机器代码生成器而不是尝试运行汇编程序吗?你试过传递--integrated-as吗?你能展示一个使用-v的示例命令行和输出吗?
  • 我的配置行,虽然看起来没什么帮助:../llvm/configure --target=mipsel-sde-elf --prefix=/some/prefix --enable-optimized。这确实工作正常并运行/some/prefix/mipsel-sde-elf-as。就是说,我平时用的是集成的汇编器,所以有一段时间没测试了。
  • @CarlNorum 我也确实有集成汇编器(armv7l-unknown-linux-gnueabihf-llvm-as)与 clang 位于同一文件夹中,但它仍在使用/usr/bin/as。我不确定armv7l-unknown-linux-gnueabihf-llvm-as 是否在内部调用/usr/bin/as
  • 在您的调用中使用-v 标志应该向您展示使用完整命令行运行的每个工具。
  • @CarlNorum -v 标志只显示/usr/bin/as 的调用。

标签: c clang cross-compiling


【解决方案1】:

尝试传递 --host 选项进行配置,这将导致所有 cc ar 等实用程序以 armv7l-unknown-linux-gnueabihf- 为前缀 例如:

./configure --host=armv7l-unknown-linux-gnueabihf --build=i686-unknown-linux-gnu

由于您正在使用 configure 并希望使用 autotools 来看看: automake Cross compiling

【讨论】:

  • 我想你误解了这个问题。 @JosephH 询问如何使用 clang 交叉编译程序,但您的答案与“如何交叉编译 clang 本身”有关。
【解决方案2】:

我一直在使用 ./configure 从源目录进行配置时遇到问题,最后放弃了。这些天来,我总是从一个单独的目录进行配置,即 ..//configure 尽管有人告诉我建议使用绝对路径进行配置。

您的 ARM binutils 应安装在您用于 clang 的相同前缀中,并确保它们在您配置和构建 clang 时位于路径中 - 即 PATH=/some/prefix/bin:$PATH; /configure --target=armv7l-unknown-linux-gnueabihf。如果您出于打包目的将它们保存在单独的目录中,那么 make install DESTDIR= 应该会有所帮助。

我通常不会构建 clang,但我用于 devkitARM 的构建脚本可能会有所帮助 - http://sourceforge.net/p/devkitpro/buildscripts/ci/c372699fc7b4de90eb044314ce5bed04db640291/tree/

【讨论】:

  • 抱歉,我之前从未在与源目录相同的目录中配置过 clang。为简洁起见,我在问题中包含的命令省略了 --prefix 标志。正如您从 CarlNorum 的 cmets 中看到的那样,我确实注意到他包含 --prefix 标志,但它仍然对我不起作用。奇怪的是,编译过程确实似乎在bin(具有正确的目标三元组)文件夹中创建了集成的汇编程序二进制文件,但它从未使用它。我一定会看看您在答案中包含的构建脚本。
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
相关资源
最近更新 更多