Articles of 交叉编译

GStreamer上“黑名单”的含义是什么?

我正在尝试交叉编译GStreamer。 版本是1.2.3。 主机PC的操作系统是x86 linux,Target系统的操作系统是MIPSEL linux OS。 我成功地为目标设备编译gstreamer和插件。 而gst-launch-1.0可以执行。 所以我试图使用基本的插件libgstvideotestsrc。 但它没有工作。 所以我跑“`gst-inspect-1.0'来检查插件,然后find如下的结果。 # gst-inspect-1.0 -b Blacklisted files: libgstinterlace.so libgstfbdevsink.so libgstgeometrictransform.so libgstmultifile.so libgstencodebin.so libgstfestival.so libgstlevel.so libgstdvdspu.so libgstauparse.so libgsty4menc.so libgstvideofilter.so libgstvideoscale.so libgstaccurip.so libgstvideoconvert.so libgstaudioparsers.so libgsttcp.so libgstvolume.so libgstcoreelements.so libgstmpegtsdemux.so libgstid3tag.so libgstadpcmdec.so libgstmfc.so libgstrtpmanager.so libgstaudiotestsrc.so libgstdeinterlace.so libgstdebug.so libgstplayback.so libgstspeed.so libgstasfmux.so libgsticydemux.so libgstmpegpsdemux.so libgstalaw.so libgstwavparse.so libgstpnm.so libgstnavigationtest.so libgstcamerabin2.so libgstsdpelem.so libgstisomp4.so libgstliveadder.so […]

传统的gcc编译器问题

我们正在使用一个基于gcc 2.6.0的遗留编译器来交叉编译我们现在仍在使用的旧embedded式处理器(是的,它自1994年起仍在使用!)。 为这个芯片做了gcc端口的工程师早就开始工作了。 尽pipe我们可以从网上的某个地方恢复gcc 2.6.0源码,但是这个芯片的设置已经在公司历史的大厅里消失了。 直到最近,由于编译器仍在运行并生成可用的可执行文件,所以直到最近,我们一直在困惑,但是从2.6.25内核(也是2.6.26)开始,它会失败并显示消息gcc: virtual memory exhausted …即使不带参数运行或只有-v 。 我已经使用2.6.24内核重启了我的开发系统(从2.6.26开始),编译器再次运行(2.6.25不重启)。 我们有一个系统,我们在2.6.24中只是为了构build这个芯片而做的,但是当linux世界移动到我们不能再重build一个将运行的系统编译器(即我们的2.6.24系统死机,我们不能得到2.6.24安装和运行在一个新的系统,因为一些软件部分不再可用)。 有没有人有任何想法,我们可以做一个更现代化的安装,让这个遗留的编译器运行? 编辑 : 回答一些评论… 不幸的是,这是我们的芯片特有的源代码更改丢失。 这个损失发生在两个主要的公司reorgs和几个系统pipe理员(其中几个真的留下了一个烂摊子)。 我们现在使用configuration控制,但是对于这个问题,closures仓库门太晚了。 虚拟机的使用是一个好主意,也可能是我们最终做的事情。 谢谢你的想法。 最后,我试着用ephemientbuild议strace,发现最后一个系统调用是brk(),它在新系统(2.6.26内核)上返回一个错误,并在旧系统(2.6.24内核)上返回成功。 这表明我真的用完了虚拟内存,除了tcsh“limit”在旧系统和新系统上返回相同的值,而/ proc / meminfo显示新系统的内存稍微多一些,交换空间也多了一点。 也许这是一个碎片问题或程序正在加载? 我做了一些进一步的研究,并在内核2.6.25中添加了“brk随机化”,但CONFIG_COMPAT_BRK默认启用(禁用brk随机化)。 编辑 : OK,更多信息:看起来像brk随机化是罪魁祸首,遗留gcc调用brk()来更改数据段的结尾,现在失败,导致遗留gcc报告“虚拟内存已耗尽”。 有几个logging的方法来禁用brk随机化: sudo echo 0 > /proc/sys/kernel/randomize_va_space sudo sysctl -w kernel.randomize_va_space=0 用setarch i386 -R tcsh (或“-R -L”)启动一个新的shell 我已经尝试过,他们似乎有一个效果,brk()返回值是不同的(总是相同的)比没有他们(在内核2.6.25和2.6.26尝试),但brk()仍然失败,所以传统的gcc仍然失败:-(。 另外,我已经设置vm.legacy_va_layout=1和vm.overcommit_memory=2没有任何变化,我已经用/etc/sysctl.conf中保存的vm.legacy_va_layout=1和kernel.randomize_va_space=0设置重新启动。 仍然没有改变。 编辑 : 在内核2.6.26(和2.6.25)上使用kernel.randomize_va_space=0导致strace legacy-gcc报告的以下brk()调用: […]

交叉编译PHP

我已经下载了PHP 5.4.0源代码,将其解压缩并移入源文件夹。 我做了一个configuration: ./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/ 其次是 make 没有错误,一切运行良好。 接下来我做一个make install。 make install 再次,一切运行良好。 我将它移动到目标平台并运行 /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 […]

为什么CMake在交叉编译Net-SNMP代理的时候显然是指主机系统文件,尽pipe正在使用正确的工具链文件?

我正在开发一个Net-SNMP子代理,其最终目标将是一个ARM板,所以我使用CMake来更容易地pipe理构build本地和交叉编译的版本。 我开始在我的主机平台(x86_64)上进行testing,并使用CMakeLists.txt文件构build并正常工作: cmake_minimum_required (VERSION 2.6) project (snmp_agent C) set(snmp_agent_VERSION_MAJOR 1) set(snmp_agent_VERSION_MINOR 0) # Defines path to the net-snmp-config script set(NETSNMPCONFIG "${CMAKE_FIND_ROOT_PATH}/usr/bin/net-snmp-config") # Gets compiling flags and libs linked to Net-SNMP execute_process(COMMAND "${NETSNMPCONFIG}" "–base-cflags" OUTPUT_VARIABLE NETSNMPCFLAGS) execute_process(COMMAND "${NETSNMPCONFIG}" "–agent-libs" OUTPUT_VARIABLE NETSNMPLIBS) # Removes leading/trailing spaces from net-snmp-config output string(STRIP ${NETSNMPCFLAGS} NETSNMPCFLAGS) string(STRIP ${NETSNMPLIBS} NETSNMPLIBS) # Prints […]

如何安装交叉编译杯到目标板?

我交叉编译杯子1.7.0 for sitara arm linux 6 我跟着 ./configure –host=arm-linux-gnueabihf –disable-gssapi –prefix=/media/rootfs make make install 所有的杯子相关的文件都会自动保存在SD卡中,但是在inputcupsd命令时显示错误,而不是启动cups服务器 cupsd: Child exited on signal 1. 在检查/etc/cups/cupsd.conf时,configuration文件中有几个path /media/rootfs/var/run/cups/cups.sock 代替 /var/run/cups/cups.sock 1)如何安装这个编译的杯子目标板没有 – 前缀? 2)交叉编译是否有缺失的步骤? 任何帮助将是感恩。 这是Makefile # # "$Id: Makefile 11107 2013-07-08 13:47:51Z msweet $" # # Top-level Makefile for CUPS. # # Copyright 2007-2013 by Apple Inc. # Copyright […]

交叉编译glibc为arm,得到了一些unwind函数的undefined引用

现在我需要为我们的armv7 soc平台构buildglic-2.15。 我按照以下步骤来构build它: 从http://ftp.gnu.org/gnu/libc/下载并解压glibc-2.15和glibc-ports mkdir build-glibc cd build-glibc echo "CFLAGS += -D__ARM_ARCH_7__ -D__LINUX_ARM_ARCH__=7 -march=armv7 -U_FORTIFY_SOURCE -fno-stack-protector" > configparms PATH={toolchain}/bin BUILD_CC={build}/bin/gcc CC={toolchain}/bin/arm-linux-gnueabihf-gcc AR={toolchain}/bin/arm-linux-gnueabihf-ar RANLIB={toolchain}/bin/arm-linux-gnueabihf-ranlib ../glibc-2.15/configure –prefix=/linaro-toolchain/ \ –exec-prefix=/linaro-toolchain/ \ –host=arm-linux-gnueabihf \ –build=i686-pc-linux-gnu \ –disable-profile –enable-add-ons=ports,nptl \ –enable-kernel=2.4.0 –with-tls –with-__thread \ –without-gd –without-cvs \ –with-headers=/linaro-toolchain/arm-linux-gnueabihf/libc/usr/include \ –disable-multilib –enable-shared \ libc_cv_forced_unwind=yes \ libc_cv_c_cleanup=yes \ lic_cv_gnu89_inline=yes lic_cv_ssp=no \ libc_cv_ctors_header=yes […]

如何在arago项目中编写自己的配方包

如何在arago项目中编写自己的食谱包? 我知道一点,它可以是bitbake文件。 但我怎么写,不知道。 我在互联网上search,但没有find任何好的来源开始。 有人可以提供我的链接或例子开始? 问候 Linux学习者。

ARM Linux可执行文件神秘地在x86_64上运行

我正在使用Docker容器( thewtex/cross-compiler-linux-armv7 )在Fedora 23 x86_64系统上交叉编译一个简单的“Hello World”Linux用户空间C程序。 目标系统是ARMv7embedded式系统(特别是带库存固件的Kobo Aura HD电子阅读器)。 程序的源代码( hello_world.c )如下 #include <stdio.h> int main(int argc, char *argv[]) { printf("Hello World!\n"); return 0; } 我使用以下一组命令调用编译器 docker run thewtex/cross-compiler-linux-armv7 > ./dockcross.sh chmod +x dockcross.sh 出于某种原因,生成的shell脚本是错误的,我手动必须replace/cross-compiler-base/cross-compiler-linux-armv7/和/:build/:build:z/ 。 现在我跑了 ./dockcross.sh arm-linux-gnueabihf-cc hello_world.c -static -o hello file返回有关生成的hello可执行file的以下信息 hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux), statically […]

使用交叉编译器编译原生GCC for arm

我期待为ARM系统创build一个GCC的本地版本,我遇到了一些麻烦。 生成机器是i686-linux。 我看到的每个教程都告诉我如何设置实际的交叉编译套件(我已经使用了crosstools-ng)。 但是,我没有看到任何与编译本机ARM GCC有关的东西。 我使用的configurationstring如下,我只设置了标头的sysroot。 我还交叉编译并安装了GMP和MPFR。 ../../gcc-4.3.5/configure –host=arm-unknown-linux-gnueabi –build=i686-build_pc-linux-gnu –target=arm-unknown-linux-gnueabi –prefix=/home/vm/gcc-native/sysroot –with-sysroot=/home/vm/gcc-native/sysroot –enable-shared –enable-threads –disable-libmudflap –disable-libssp –disable-libgomp –disable-libstdcxx-pch –with-gnu-as –with-gnu-ld –enable-languages=c,c++ –enable-symvers=gnu –enable-__cxa_atexit –disable-nls –disable-multilib –with-gmp=/home/vm/gcc-native/sysroot/ –with-mpfr=/home/vm/gcc-native/sysroot/ 海湾合作委员会将build立一段时间,但随后死亡: checking for suffix of object files… configure: error: cannot compute suffix of object files: cannot compile. 我不知道这将甚至会运行在我的系统上,因为我在i686-linux上构build,目标/主机都是arm-linux。 我现在的想法是find一个ltib发行版,看一个GCC的规格文件,并试图遵循所有的步骤。 由于与std命名空间冲突,我的板上运行的GCC无法在我的系统上编译。 任何信息/链接将不胜感激!

configuration“–prefix”选项进行交叉编译

在进行交叉编译时,应该将哪个path传递给–prefix选项:我应该在生成机器上指定path还是在目标平台上指定path? 假设我将代码构build到/home/me/arm/build/target_fs/usr ,然后将这些文件复制到我的目标平台上,它们将位于/usr 。 我应该使用–prefix=/home/me/arm/build/target_fs/usr或者只是–prefix=/usr ,然后make install DESTDIR=/home/me/arm/build/target_fs ? 我认为–prefix不是构build的path,而是运行环境的path(即目标平台上的path)。 这里的答案让我觉得我是对的。 但是在那里有许多页面(例如, 交叉编译FFmpeg for Raspbian :– –prefix=/my/path/were/i/keep/built/ ),人们在构build机器上使用path–prefix 。 所以我很困惑。