我正在运行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-gnu和i686-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具有缺失包含文件的子目录.知道什么包应该照顾这个吗?
我想在我的笔记本电脑上安装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.
我试图在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中设置的构建不同编译器的内容.
有人建议如何做(如果可以完成)?
该脚本./configure接受3个选项--build,--host和--target.我混淆了他们的角色.它们的区别和语义是什么?
我正在尝试为我的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中的交叉编译器一样?
我想使用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.
问题:
当从Linux主机交叉编译Qt for Windows之类的东西时,是否应该调用本机编译器?也就是说,在交叉编译过程中,我们不应该只使用交叉编译器吗?当我指定-xplatform选项时,我不明白为什么Qt的configure脚本会尝试调用我的系统的本机编译器.
如果我使用的是mingw交叉编译器,何时需要处理specs文件?GCC的规范文件对我来说仍然是一个谜,所以我想知道这里的一些背景是否对我有帮助.
一般来说,除了在我的qmake.conf中指定交叉编译器之外,我还需要考虑什么?
我正在使用交叉编译器.我的代码是:
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/C++应用程序移植到OS X.
我没有Mac,但我有Linux和Windows.这有什么工具吗?
运行时出现以下错误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).
在为本机平台开发时,我可以使用ldd列出所有共享库(.so文件)我构建的二进制可执行文件将在启动时尝试加载.但是当交叉编译时,我不知道如何获得相同的信息.这ldd不是一个普通的binutils实用程序,比如strip或者ar,可以和gcc交叉编译一起构建,但相反,它是一个神秘的shell脚本,显然只能在本机平台上运行.
那么,使用跨目标binutils工具,有没有办法获得外部二进制文件的动态链接依赖项列表?
cross-compiling ×10
c++ ×3
linux ×3
gcc ×2
ubuntu ×2
32bit-64bit ×1
arm ×1
autoconf ×1
binutils ×1
c ×1
compilation ×1
configure ×1
g++ ×1
go ×1
macos ×1
makefile ×1
mingw ×1
mips ×1
nachos ×1
option ×1
qt ×1
raspberry-pi ×1
ubuntu-10.10 ×1
vlc ×1