标签: cross-compiling

在Ubuntu中交叉编译32位的64位程序时,缺少包含"bits/c ++ config.h"

我正在运行32位版本的Ubuntu 10.10并尝试交叉编译为64位目标.根据我的研究,我已经安装了g ++ - multilib包.

该程序是一个非常简单的hello世界:

#include <iostream>

int main( int argc, char** argv )
{
  std::cout << "hello world" << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译:

g++ -m64 main.cpp
Run Code Online (Sandbox Code Playgroud)

错误:

In file included from main.cpp:1:
/usr/include/c++/4.4/iostream:39: fatal error: bits/c++config.h: No such file or directory
compilation terminated.
Run Code Online (Sandbox Code Playgroud)

我发现了一个c++config.h文件,但他们居住下i486-linux-gnui686-linux-gnu目录中/usr/include/c++/4.4/没有c++config.h/usr/include/c++/bits.

关于我失踪的任何想法?没有-m64标志的编译工作正常(创建并正确运行a.out).

编辑感谢来自@nightcracker的提示,我对32位和64位系统上的包含结构进行了一些调查.我在下面添加了一个答案,暂时"修复"了问题,但我认为它会在下次更新时中断.基本上,我错过了一个名为的目录/usr/include/c++/4.4/i686-linux-gnu/64,该目录应包含一个名为bits具有缺失包含文件的子目录.知道什么包应该照顾这个吗?

ubuntu g++ cross-compiling 32bit-64bit ubuntu-10.10

166
推荐指数
3
解决办法
16万
查看次数

编译Nachos源代码时出错"gnu/stubs-32.h:没有这样的文件或目录"

我想在我的笔记本电脑上安装Nachos,笔记本电脑上有Ubuntu 11.04.

代码在C中,所以要构建它我假设我需要交叉编译器.这就是我的问题所在.我使用命令下载了MIPS交叉编译器的源代码

  wget http://mll.csie.ntu.edu.tw/course/os_f08/assignment/mips-decstation.linux-xgcc.gz
Run Code Online (Sandbox Code Playgroud)

我用它解压缩它

tar zxvf mips-decstation.linux-xgcc.gz      
Run Code Online (Sandbox Code Playgroud)

这没关系,但是当我尝试构建nachos操作系统的源代码时,使用make,我得到了这个错误 -

/usr/include/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h: No such file or directory compilation terminated. make: *** [bitmap.o] Error 1
Run Code Online (Sandbox Code Playgroud)

我试图按照这里给出的指示 - http://mll.csie.ntu.edu.tw/course/os_f08/217.htm,一切正常,除非我尝试使用make.

ubuntu gcc mips cross-compiling nachos

165
推荐指数
4
解决办法
19万
查看次数

交叉编译Go OSX?

我试图在OSX上交叉编译一个go app来为windows和linux构建二进制文件.我已经阅读了网上可以找到的所有内容.我发现的最近的例子已经发表(除了许多未完成的关于疯狂邮件列表的讨论):

http://solovyov.net/en/2012/03/09/cross-compiling-go/

但它不适用于我的安装.我去了1.0.2.由于1.0.2是最新版本,因此我认为以上所有示例都不适用于此版本.

尝试将./make.bash --no-cleanENV变量设置为386/windows,它确实构建了go,但它构建用于我的安装,这darwin/amd64完全忽略了ENV中设置的构建不同编译器的内容.

有人建议如何做(如果可以完成)?

compilation cross-compiling go

129
推荐指数
6
解决办法
10万
查看次数

"./configure"选项"--build"," - host"和"--target"的区别是什么?

该脚本./configure接受3个选项--build,--host--target.我混淆了他们的角色.它们的区别和语义是什么?

autoconf configure cross-compiling option

112
推荐指数
2
解决办法
7万
查看次数

如何在我的Linux主机上安装Raspberry Pi交叉编译器?

我正在尝试为我的Ubuntu机器上的Raspberry Pi进行交叉编译.

在我最初的尝试中,我使用的是arm-linux-gnueabi编译器,它可以在Ubuntu repo中找到.我得到了这个工作.我能够构建所有依赖项并在我的cmake项目中使用交叉编译器.

但是,我相信我应该使用hf版本,所以我切换到arm-linux-gnueabihf.然后我意识到这不适用于Raspberry Pi,因为它是armv6.

经过一些谷歌搜索后,我找到了GitHub预先构建的工具链.

我下载了工具链,但我真的不明白如何"安装"它.我将文件解压缩到我的主目录.目录结构如下所示:

/gcc-linearo-arm-linux-gnueabihf-raspbian
    /arm-linux-gnueabihf
        /bin
            (contains g++, gcc, etc)
        /lib
            (contains libstdc++ library)
    /bin
        (contains arm-linux-gnueabihf-g++, arm-linux-gnueabihf-...)
    /lib
        (gcc lib stuff)
Run Code Online (Sandbox Code Playgroud)

如果我将目录更改为INNER bin文件夹,我可以从终端编译测试程序,没有任何问题.

~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/
arm-linux-gnueabihf/bin$ g++ test.cpp -o test
Run Code Online (Sandbox Code Playgroud)

然后我尝试在OUTER bin文件夹中编译测试程序,该文件夹包含工具的前缀版本.

 ~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin$ 
 arm-linux-gnueabihf-g++ test.cpp -o test
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用编译器时(从内部bin目录之外),它无法找到工具链附带的libstdc ++共享库:

arm-linux-gnueabihf-gcc: error while loading shared libraries: 
libstdc++.so.6: cannot open shared object file: No such file or directory.
Run Code Online (Sandbox Code Playgroud)

此外,我希望能够使用编译器而无需导航到bin目录.所以我尝试添加OUTER bin目录(因为我想要前缀版本)和两个lib目录到我的PATH:

export PATH=$PATH:~/tools/.../bin
export PATH=$PATH:~/tools/.../lib
export PATH=$PATH:~/tools/.../.../lib
Run Code Online (Sandbox Code Playgroud)

但是,这会导致相同的错误.我应该如何"安装"工具链,以便我可以随处使用工具链,就像我使用Ubuntu repo中的交叉编译器一样?

c++ linux arm cross-compiling raspberry-pi

107
推荐指数
4
解决办法
12万
查看次数

如何为从Linux到Windows目标的交叉编译配置Qt?

我想使用Linux x86_64主机交叉编译用于Windows x86_64目标的Qt库(最终是我的应用程序).我觉得我很亲密,但我可能对这个过程的某些部分有一个根本的误解.

我首先在Fedora机器上安装所有mingw软件包,然后修改win32-g++qmake.conf文件以适应我的环境.但是,我似乎陷入了Qt的一些看似明显的配置选项:-platform-xplatform.Qt文档说-platform应该是主机机器架构(您正在编译的地方),并且-xplatform应该是您希望部署的目标平台.在我的情况下,我设置-platform linux-g++-64-xplatform linux-win32-g++其中的linux-Win32的克++是我的改性Win32的克++结构.

我的问题是,在使用这些选项执行configure后,我看到它调用我的系统编译器而不是交叉编译器(x86_64-w64-mingw32-gcc).如果我省略了该-xplatform选项并设置-platform为我的目标规范(linux-win32-g ++),它会调用交叉编译器,但是当它找到一些与Unix相关的函数时没有定义错误.

以下是我最新尝试的一些输出:http://pastebin.com/QCpKSNev.

问题:

  1. 当从Linux主机交叉编译Qt for Windows之类的东西时,是否应该调用本机编译器?也就是说,在交叉编译过程中,我们不应该使用交叉编译器吗?当我指定-xplatform选项时,我不明白为什么Qt的configure脚本会尝试调用我的系统的本机编译器.

  2. 如果我使用的是mingw交叉编译器,何时需要处理specs文件?GCC的规范文件对我来说仍然是一个谜,所以我想知道这里的一些背景是否对我有帮助.

  3. 一般来说,除了在我的qmake.conf中指定交叉编译器之外,我还需要考虑什么?

linux qt mingw cross-compiling

78
推荐指数
3
解决办法
7万
查看次数

未定义的静态成员引用

我正在使用交叉编译器.我的代码是:

class WindowsTimer{
public:
  WindowsTimer(){
    _frequency.QuadPart = 0ull;
  } 
private:
  static LARGE_INTEGER _frequency;
};
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

对WindowsTimer :: _ frequency'的未定义引用

我也尝试将其改为

LARGE_INTEGER _frequency.QuadPart = 0ull;
Run Code Online (Sandbox Code Playgroud)

要么

static LARGE_INTEGER _frequency.QuadPart = 0ull;
Run Code Online (Sandbox Code Playgroud)

但我仍然得到错误.

有谁知道为什么?

c++ cross-compiling undefined-reference

70
推荐指数
4
解决办法
6万
查看次数

如何在Linux或Windows中编译OS X?

我想将我的C/C++应用程序移植到OS X.

我没有Mac,但我有Linux和Windows.这有什么工具吗?

c c++ macos cross-compiling

68
推荐指数
5
解决办法
7万
查看次数

Hunk#1在1.失败这是什么意思?

运行时出现以下错误make,我不知道它意味着什么或者该怎么做.任何人都可以照亮我或指向正确的方向吗?

(cd libdvdnav-git && patch -p1) < ../../contrib/src/dvdnav/dvdnav.patch
patching file Makefile.am
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED -- saving rejects to file Makefile.am.rej
make: *** [dvdnav] Error 1
Run Code Online (Sandbox Code Playgroud)

我正在尝试为win32交叉编译VLC(使用linux).

makefile vlc cross-compiling

57
推荐指数
3
解决办法
9万
查看次数

如何列出非本机二进制文件的库依赖项?

在为本机平台开发时,我可以使用ldd列出所有共享库(.so文件)我构建的二进制可执行文件将在启动时尝试加载.但是当交叉编译时,我不知道如何获得相同的信息.这ldd不是一个普通的binutils实用程序,比如strip或者ar,可以和gcc交叉编译一起构建,但相反,它是一个神秘的shell脚本,显然只能在本机平台上运行.

那么,使用跨目标binutils工具,有没有办法获得外部二进制文件的动态链接依赖项列表?

linux gcc shared-libraries cross-compiling binutils

56
推荐指数
3
解决办法
7万
查看次数