标签: cross-compiling

关于GCC和交叉编译的一般问题

最近我一直在使用GCC进行交叉编译,并发现了一个看似复杂的区域,即工具链.

我不太明白这一点,因为我认为GCC可以为大多数常见架构创建二进制机器代码,而其他真正重要的是你链接的库和创建的可执行类型.

海湾合作委员会不能自己做所有这些事吗?通过单一构建的GCC,所有适当的库和发送到GCC的正确标志,我可以为Windows x86机器生成PE可执行文件,然后为嵌入式Linux MIPS设备创建ELF可执行文件,最后为OSX PowerPC创建可执行文件机?如果没有,有人可以解释你将如何实现这一目标?

c gcc cross-compiling

15
推荐指数
1
解决办法
2895
查看次数

交叉编译Python扩展

我在Buildroot Linux发行版ARM(Python 2.7.2)下交叉编译netifaces扩展时遇到了问题.根据这个博客http://whatschrisdoing.com/blog/2009/10/16/cross-compiling-python-extensions/我已经定义了CC,LDSHARE等环境变量,但是distutils/setuptools没有将CC带入帐户,所以所有测试都将失败:

running build
Setting prefix
Setting prefix
running build_ext
checking for getifaddrs... not found. (cached)
checking for getnameinfo... not found. (cached)
checking for socket IOCTLs... not found. (cached)
checking for optional header files... netash/ash.h netatalk/at.h netax25/ax25.h neteconet/ec.h netipx/ipx.h netpacket/packet.h linux/irda.h linux/atm.h linux/llc.h linux/tipc.h linux/dn.h. (cached)
checking whether struct sockaddr has a length field... no. (cached)
checking which sockaddr_xxx structs are defined... at ax25 in in6 ipx un ash ec ll  atmpvc atmsvc dn irda llc. (cached) …
Run Code Online (Sandbox Code Playgroud)

python distutils setuptools cross-compiling

15
推荐指数
1
解决办法
5949
查看次数

如何使用CMake交叉编译CMake for ARM

总之,我试图用CMake交叉编译CMake,我认为我没有正确地链接库.我想做的可能是不可能的,但我至少想知道为什么不可能,如果是这样的话.

系统:主机是带有Cavium ARM9 CPU 的Linux机箱.它目前正在运行Linux内核版本2.6.24.4和Debian 5.0(Lenny).我的工作站是运行Ubuntu 12.04 LTS(精确穿山甲)的Core i5.

我的总体目标是在Linux机器上运行ROS.我必须从源代码编译而不是使用apt,因为Debian 6.0(Squeeze)二进制文件需要Cavium不提供的拇指支持,并且Debian 5.0(Lenny)不需要很多所需的软件包.我在安装所需的各种库方面取得了进展,但是当我进入步骤1.3.1并尝试运行CMake时,我收到了错误

需要CMake 2.8或更高版本.您正在运行2.6.0版

接下来我尝试在Linux机器上下载并构建CMake 2.8.8,但这对系统来说太过分了.当失败时,我下载了制造商网站上建议的工具链,并使用[www.cmake.org/Wiki/CMake_Cross_Compiling]上的交叉编译指南来构建CMake可执行文件.这是我的工具链文件:

# This one is important
SET(CMAKE_SYSTEM_NAME Linux)

# Specify the cross compiler
SET(CMAKE_C_COMPILER   /pathto/crosstool-linux-gcc-4.5.2-gclibc-2.9-oabi/arm-unknown-linux-gnu/bin/arm-unknown-linux-gnu-gcc)
SET(CMAKE_CXX_COMPILER /pathto/crosstool-linux-gcc-4.5.2-gclibc-2.9-oabi/arm-unknown-linux-gnu/bin/arm-unknown-linux-gnu-g++)

# Where is the target environment
SET(CMAKE_FIND_ROOT_PATH  /pathto/crosstool-linux-gcc-4.5.2-gclibc-2.9-oabi/arm-unknown-linux-gnu /pathto/crosstool-linux-gcc-4.5.2-gclibc-2.9-oabi/arm-unknown-linux-gnu/arm-unknown-linux-gnu)

# Search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

# For libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
Run Code Online (Sandbox Code Playgroud)

但是,在Linux机器上使用二进制文件会产生错误

cmake:/usr/lib/libstdc++.so.6:找不到版本`GLIBCXX_3.4.14'(cmake要求)

果然,图书馆不在那里:

prompt# strings /usr/lib/libstdc++.so.6 | …
Run Code Online (Sandbox Code Playgroud)

glibc cmake cross-compiling ros

15
推荐指数
1
解决办法
3万
查看次数

在交叉编译haskell代码时如何安装依赖项?

我已经成功创建了一个ghc交叉编译器,它允许我从我的x64 linux机器编译armv6h的haskell代码(在我的例子中是raspberry pi).我已成功在树莓上运行了一个hello world程序.

不,我想构建我真正的应用程序,它对其他haskell模块有很多依赖.当我为x64编译时,我就是这么做的

cabal install dependenciy1 depenency2 ...
Run Code Online (Sandbox Code Playgroud)

我知道我可以让我自己的程序成为一个cabal项目,自动完成这一步.但这不是重点.

当我尝试使用交叉编译器时

arm-unknown-linux-gnueabi-ghc --make myapp.hs
Run Code Online (Sandbox Code Playgroud)

它告诉我它找不到的模块.当然,他们没有安装!

我阅读https://ghc.haskell.org/trac/ghc/wiki/Building/CrossCompiling 并根据我尝试过

cabal --with-ghc=arm-unknown-linux-gnueabi-ghc --with-ghc-pkg=arm-unknown-linux-gnueabi-ghc-pkg --with-ld=arm-unknown-linux-gnueabi-ld install random
Run Code Online (Sandbox Code Playgroud)

随机是我正在尝试安装的依赖性.我收到以下错误:

Resolving dependencies...
Configuring random-1.0.1.3...
Failed to install random-1.0.1.3
Last 10 lines of the build log ( /home/daniel/.cabal/logs/random-1.0.1.3.log ):
/home/daniel/.cabal/setup-exe-cache/setup-Cabal-1.18.1.3-arm-linux-ghc-7.8.3.20140804: /home/daniel/.cabal/setup-exe-cache/setup-Cabal-1.18.1.3-arm-linux-ghc-7.8.3.20140804:      cannot execute binary file
cabal: Error: some packages failed to install:
random-1.0.1.3 failed during the configure step. The exception was:
ExitFailure 126
Run Code Online (Sandbox Code Playgroud)

当我做

file /home/daniel/.cabal/setup-exe-cache/setup-Cabal-1.18.1.3-arm-linux-ghc-7.8.3.20140804
Run Code Online (Sandbox Code Playgroud)

我明白了

/home/daniel/.cabal/setup-exe-cache/setup-Cabal-1.18.1.3-arm-linux-ghc-7.8.3.20140804: ELF 32-bit LSB executable, ARM, EABI5 version …
Run Code Online (Sandbox Code Playgroud)

haskell cross-compiling ghc cabal-install raspberry-pi

15
推荐指数
1
解决办法
1170
查看次数

如何用Java 11生成代码,但要针对Java 8及更高版本?

我正在开发一个小型库,出于明显的原因,我想使用所有Java 11功能(我现在猜不到的模块除外)来生成代码,但是我希望该库与Java 8及更高版本兼容。

当我尝试这个:

javac -source 11 -target 1.8 App.java
Run Code Online (Sandbox Code Playgroud)

我收到以下消息:

warning: source release 11 requires target release 11
Run Code Online (Sandbox Code Playgroud)

...当我查看字节码时,我看到该类的版本为0x37(Java 11):

$ xxd App.class
00000000: cafe babe 0000 0037 ...
Run Code Online (Sandbox Code Playgroud)

Java 8无法加载它:

Exception in thread "main" java.lang.UnsupportedClassVersionError: App has been
    compiled by a more recent version of the Java Runtime (class file version 55.0),
    this version of the Java Runtime only recognizes class file versions up to 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
    at …
Run Code Online (Sandbox Code Playgroud)

java javac cross-compiling java-11

15
推荐指数
5
解决办法
4880
查看次数

在 Mac M1 上为目标 x86_64 linux 编译 Rust

我正在尝试在我的 M1 Mac 上为 Linux 的 x86_64 目标编译 Rust 代码。我使用 Docker 来实现这一点。

我的 Dockerfile:

FROM rust:latest AS builder

RUN rustup install stable-x86_64-unknown-linux-musl

RUN rustup target add x86_64-unknown-linux-musl
RUN apt -y update
RUN apt install -y musl-tools musl-dev
RUN apt-get install -y build-essential
RUN apt install -y gcc-x86-64-linux-gnu

ADD ./cargo ./cargo/
WORKDIR /cargo

ENV RUSTFLAGS='-C linker=x86_64-linux-gnu-gcc'
ENV CC='gcc'
ENV CC_x86_64_unknown_linux_musl=gcc-x86-64-linux-gnu
ENV CC_x86_64-unknown-linux-musl=gcc-x86-64-linux-gnu

RUN cargo build --target x86_64-unknown-linux-musl --release
Run Code Online (Sandbox Code Playgroud)

但我会得到错误

发生错误:找不到工具。是否已gcc-x86-64-linux-gnu安装?

我认为应该安装它,因为我安装了它apt install -y gcc-x86-64-linux-gnu

有人知道为什么会发生这种情况吗?


完整输出:

docker …

linux cross-compiling rust docker apple-m1

15
推荐指数
2
解决办法
8815
查看次数

如何在Windows平台上编译Golang包?

该文档适用于Mac OS X和Linux,我希望知道如何在Windows平台上编译Golang包.在Windows上,我不知道如何编写make文件以及使用哪个工具来创建它.

似乎没有一个名为make或go的工具可以与Go开发工具的安装文件一起使用.

谢谢.

window cross-compiling go

14
推荐指数
2
解决办法
3万
查看次数

交叉编译OpenSSH for ARM

有谁知道如何跨ARM编译OpenSSH?这就是我所做的:

首先,我已经下载了Zlib源代码,解压缩它,构建它并使用以下命令行安装它:

   # ./configure --prefix=/usr/local/cross/arm

   # make 

   # make install
Run Code Online (Sandbox Code Playgroud)

但是当我尝试为ARM目标板编译OpenSSH时,它会在此./configure过程中给出错误"zlib missing" :

  # sudo LDFLAGS=-L/usr/local/cross/arm/lib CC=arm-none-linux-gnueabi-gcc PATH=$PATH:/home/arishop/arm-tool-chain/arm-fsl-linux-gnueabi/bin/ ./configure --host=arm-linux --with-zlib=/usr/local/cross/arm/ --prefix=/usr/local/cross/arm/openssh
Run Code Online (Sandbox Code Playgroud)

openssl arm openssh zlib cross-compiling

14
推荐指数
3
解决办法
5万
查看次数

交叉编译PHP

我已经下载了PHP 5.4.0源代码,将其解压缩并移动到源文件夹中.

我做配置:

./configure --build=x86_64-unknown-linux-gnu --host=arm-linux-uclibcgnueabi --prefix=/usr/arm/www CC="arm-linux-uclibcgnueabi-gcc --sysroot=/toolchains/gnu_cortex-a9_tools/"  --disable-libxml --disable-dom  --without-iconv --without-openssl --disable-simplexml --disable-xml --disable-xmlreader --disable-xmlwriter --without-pear --without-sqlite3 --disable-pdo --without-pdo-sqlite --disable-phar  --with-config-file-path=/etc/
Run Code Online (Sandbox Code Playgroud)

其次是

make
Run Code Online (Sandbox Code Playgroud)

没有错误,一切都运行良好.接下来我做一个make install.

make install
Run Code Online (Sandbox Code Playgroud)

一切都运行良好.我将它移动到目标平台并运行

/usr/arm/www/bin/php -v
PHP 5.4.0 (cli) (built: Aug 15 2012 16:07:41) 
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
Run Code Online (Sandbox Code Playgroud)

我用我的网络服务器和php直接测试一个简单的主页.

<?php echo "hello" ?>
# php index.php
hello
Run Code Online (Sandbox Code Playgroud)

它按预期工作.接下来我测试:

<?php
$output = shell_exec('ls -lart');
echo "<pre>$output</pre>";
?>
Run Code Online (Sandbox Code Playgroud)

哦,不!

# php shell.php 

Segmentation fault
Run Code Online (Sandbox Code Playgroud)

我设定了另一个脚本:

#!/bin/php …
Run Code Online (Sandbox Code Playgroud)

php linux embedded cross-compiling

14
推荐指数
0
解决办法
3303
查看次数

CMake:C编译器无法编译简单的测试程序

我正在尝试针对Mips处理器交叉编译Azure IoT SDKC。使用较旧版本的CMake(2.8.12.2)交叉编译同一SDK的较旧版本是否可以正常工作,因此我怀疑它本身就是代码。我猜这是Mips GCC编译器。

错误信息:

CMake Error at /usr/share/cmake-3.10/Modules/CMakeTestCCompiler.cmake:52 (message):
  The C compiler

    "/usr/local/mipsisa32r2el/r23/bin/mipsisa32r2el-axis-linux-gnu-gcc"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: /home/axis/azure-iot-sdk-c/cmake/iotsdk_linux/CMakeFiles/CMakeTmp

    Run Build Command:"/usr/bin/make" "cmTC_2cc84/fast"
    /usr/bin/make -f CMakeFiles/cmTC_2cc84.dir/build.make CMakeFiles/cmTC_2cc84.dir/build
    make[1]: Entering directory '/home/axis/azure-iot-sdk-c/cmake/iotsdk_linux/CMakeFiles/CMakeTmp'
    Building C object CMakeFiles/cmTC_2cc84.dir/testCCompiler.c.o
    /usr/local/mipsisa32r2el/r23/bin/mipsisa32r2el-axis-linux-gnu-gcc --sysroot=/usr/local/mipsisa32r2el/r23    -o CMakeFiles/cmTC_2cc84.dir/testCCompiler.c.o   -c /home/axis/azure-iot-sdk-c/cmake/iotsdk_linux/CMakeFiles/CMakeTmp/testCCompiler.c
    Linking C executable cmTC_2cc84
    /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_2cc84.dir/link.txt --verbose=1
    /usr/local/mipsisa32r2el/r23/bin/mipsisa32r2el-axis-linux-gnu-gcc --sysroot=/usr/local/mipsisa32r2el/r23      -rdynamic CMakeFiles/cmTC_2cc84.dir/testCCompiler.c.o  -o cmTC_2cc84 
    /usr/local/mipsisa32r2el/r23/lib/gcc/mipsisa32r2el-axis-linux-gnu/4.7.2/../../../../mipsisa32r2el-axis-linux-gnu/bin/ld: this linker was not configured to use sysroots
    collect2: error: …
Run Code Online (Sandbox Code Playgroud)

gcc mips cmake cross-compiling

14
推荐指数
2
解决办法
1万
查看次数