Tag: 交叉编译

我可以在我的Ubuntu 9.10上使用gcc与旧版本的Linux发行版交叉编译吗?

我有一些旧的硬件,上面运行着旧版的SuSE linux。 现在我有这台花哨的开发机器运行Ubuntu 9.10。 我用来编译我的C应用程序的一些工具(用Python 2.6.x编写)在旧的SuSe框中不可用。 那么……是否有可能在我的开发盒上编译那台旧机器? 我有以下几个步骤,但想在冒险进入这个任务之前进行交叉检查:1。找出我的应用程序需要哪些静态/共享库,并找到/构建它们的目标版本2.同时找到相应的头文件3.将正确的标志输入gcc以使用目标标头和库4.将正确的标志输入gcc以使用正确的体系结构(i386 / i686),或者我是否需要交叉编译工具链。 5.编译,上传和欣赏;-) 我经常使用avr-gcc和cc65,两者都是交叉编译。 我知道你设置了一个coss编译器来开发像gumstix这样的东西,所以它应该可以为旧的/其他Linux发行版做同样的事情,不是吗? C

通过交叉编译armv5的节点来兼容库

我尝试在我的Ubuntu 14.04桌面x64上为我的QNAP armv5te机器交叉编译节点 。 QAPP App-center中存在节点QPKG,但其版本较旧(0.8.22)。 以下是有关服务器的信息: Linux SERVERNAME 3.4.6#1 Mon Dec 29 06:00:47 CST 2014 armv5tel未知 处理器名称 :Feroceon 88F6281 rev 1(v5l)@ 1.2 GHz BogoMIPS :1196.85 特点 :swp half thumb fastmult edsp CPU实现者 :0x56 CPU架构 :5TE CPU变体 :0x2 CPU部分 :0x131 CPU修订版 :1 硬件 :Feroceon-KW ARM版本 :0000 型号 :0000000000000000 这是我在桌面上使用的命令: apt-get update apt-get upgrade apt-get install […]

使用mingw32对posix_memalign的未定义引用

我正在使用Debian Squeeze,使用mingw32交叉编译windows目标。 对于Linux目标,我可以使用posix_memalign来分配对齐的内存。 我似乎无法找到一种方法让它适用于Windows目标; 我收到有关未定义引用的错误。 我尝试了几种替代function,但无济于事。 示例代码: #include #include #include int main(void) { char *foo; /* works on linux */ posix_memalign(&foo, 1024, 1024); /* deprecated linux */ memalign(1024, 1024); valloc(1024); /* should work on windows only */ _aligned_malloc(1024, 1024); } Linux目标的示例输出(预期): ben@debian6400:~/folder$ gcc –version gcc (Debian 4.4.5-8) 4.4.5 ben@debian6400:~/folder$ gcc -std=c99 test.c test.c: In function […]

如何在Crosstools-NG中使用candian以跨越本土的方式在arm板上使用gcc?

据我所知,要在armv5板上使用gcc编译可执行文件,同时使用我的x86机器编译该臂本机gcc,我需要这个设置: 配置工具链组件的机器:配置机器:x86_64 机器构建工具链组件:构建机器:x86_64 运行工具链的机器:主机:ARM 机器工具链正在生成以下代码:目标机器:ARM 基于阅读这里的交叉文档,我应该使用跨本机设置,但是当我尝试使用ct-ng menuconfig启用它时,我需要启用: Paths and misc options -> Try features marked as EXPERIMENTAL实验Paths and misc options -> Try features marked as EXPERIMENTAL Toolchain options -> Type (Cross) -> Cross-native (NO CODE!) (EXPERIMENTAL) 但当然Cross-Native不起作用,因为它没有代码。 谷歌搜索带我到这个和这个讨论在邮件列表上说我应该尝试使用加拿大的构建样式,但我有点迷失了什么元组和什么用于Build System和Host System在crosstool-ng的menuconfig ,或者如果这仍然是考虑两个讨论如何超过3年的正确方法。 关于SO的post似乎暗示构建系统和主机系统元组应该是arm-unknown-linux-gnueabi ? 为了清楚起见,我已经能够使用crosstool-ng生成的交叉编译器编译和运行可执行文件,现在我想在armv5系统上安装编译器。 编辑 :所以我刚刚将crosstools-ng生成的普通交叉编译器( arm-unknown-linux-gnueabi )添加到Toolchain options -> General toolchain options -> Host […]

C / C ++解析器如何工作?

我花了很多时间研究PHP的解析器是如何工作的: 它将PHP代码转换为最终的c代码。 但是如何将c代码翻译成可执行文件? 顺便说一句,如何判断语言A是否可以从数学方面转换为语言B?

如何在Windows中编译nDPI库附带的ndpiReader.c?

我想创建一个nDPI library附带的ndpiReader.c演示程序的.exe。 我成功地使用在github页面上指定的命令在Ubuntu上编译它,如下所示: ./autogen.sh ./configure make 我试图在Ubuntu中使用GCC交叉编译它,但我没有成功。 我也尝试使用pcapExample.sln在Visual Studio 2012中编译它,但我不断收到如下错误消息: 错误29错误C1083:无法打开包含文件:’ndpi_api.h’:没有这样的文件或目录 虽然ndpi_api.h和我收到此错误的所有其他文件已列在项目解决方案资源管理器中。 有没有人真的能够从这个ndpiReader.c文件中创建一个win32可执行文件? 如果是,请指定步骤,要求或链接。 nDPI lib托管在这里: https : //github.com/ntop/nDPI ndpiReader.c在这里托管: https : //github.com/ntop/nDPI/tree/dev/example pcapExample.sln在此处托管: https : //github.com/ntop/nDPI/tree/dev/example/Win32

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

最近我一直在使用GCC进行交叉编译,并发现了一个看似复杂的区域,即工具链。 我不太明白这一点,因为我认为GCC可以为大多数常见架构创建二进制机器代码,而其他真正重要的是你链接的库和创建的可执行类型。 GCC不能自己做所有这些事吗? 通过单一构建的GCC,所有适当的库和发送到GCC的正确标志,我可以为Windows x86机器生成PE可执行文件,然后为嵌入式Linux MIPS设备创建ELF可执行文件,最后为OSX PowerPC创建可执行文件机? 如果没有,有人可以解释你将如何实现这一目标?

加载共享库时未定义的符号

在我的程序中,我需要使用dlopen()动态加载共享库。 程序和共享库都成功交叉编译为ARM体系结构,并在我的x86上安装了交叉编译器。 但是,每当程序尝试在ARM上运行时加载库时,它都会失败,并显示以下错误: 未定义的符号:_dl_hwcap 我找不到这个错误的罪魁祸首。 让我详细介绍如何在x86上构建共享库( libmyplugin.so )。 我使用g++交叉编译器如下: /home/me/arm/gcc-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ -march=armv7-a -mfloat-abi=hard -c -s -fPIC -o build/module1.o module1.cpp /home/me/arm/gcc-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ -march=armv7-a -mfloat-abi=hard -c -s -fPIC -o build/module2.o module2.cpp /home/me/arm/gcc-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ -o dist/libmyplugin.so build/module1.o build/module2.o –sysroot /home/me/arm/sysroot/ -Wl,–no-as-needed -ldl -lX11 -lXext /home/me/arm/libstatic.a -shared -s -fPIC 请注意以下注意事项: module1.cpp和module2.cpp是我的源代码文件。 libstatic.a是一个大型的对象.o文件存档,它实现了module1.cpp和module2.cpp直接调用/引用的东西。 这些目标文件已由其他人编译为与我相同的ARM体系结构,具有相同的编译器标志,但使用稍微更新的g++编译器( v4.9而不是我的v4.8.3 )。 不幸的是,我无法控制这些物体的构建。 –sysroot /home/me/arm/sysroot/表示我的ARM OS的远程文件系统,本地g++交叉编译器在链接时可以从中获取本机库。 -Wl,–no-as-needed -ldl -lX11 […]

arm皮质a9交叉编译奇怪的浮点行为

我试图将一个更大的应用程序从x86移植到arm cortex a9,但是当交叉编译应用程序时,我得到了像modf这样的浮点函数的奇怪分段错误,其他libc ++函数似乎只是处理浮动错误,但不会崩溃(见下文)。 所以我尝试了这个小测试程序,它也可以触发错误。 测试程序的输出(见下文)应该certificate我的问题。 #include int main(int argc, char *argv[]) { double x = 80; double y = 0; std::cout << x << "\t" << y << std::endl; return 0; } 编译在arm cortex a9: @tegra$ g++ -Wall test.cpp -o test_nativ @tegra$ ./test_nativ 80 0 交叉编译 @x86$ arm-cortex_a9-linux-gnueabi-g++ test.cpp -o test_cc @tegra$ ./test_cc 0 […]

尝试在目标设备上运行交叉编译的可执行文件失败:没有这样的文件或目录

我陷入了不那么阳光明媚的交叉编译世界。 我正在尝试为我的BeagleBone Black(运行TI Cortex-A8处理器)编译一个简单的hello world应用程序。 首先,我使用gcc在x86上编译并成功运行了hello world应用程序 然后我将编译设置更改为以下内容: arm-linux-gnueabi-gcc -c -O0 -g3 -Wall main.c -o bin/obj/main.o arm-linux-gnueabi-gcc bin/obj/main.o -o bin/hello_world 我通过SCP将文件传输到BeagleBone,并使用chmod +x hello_world设置可执行权限 运行它( ./hello_world )后,我唯一的回答是: -bash: ./hello_world: No such file or directory file的输出与/sbin/init的输出匹配,正如我所期望的那样: $ file hello_world hello_world: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x24b659b7a41fe043a6f4649d4ebfb5e692ebf0c7, […]