【问题标题】:Cross compiling and deploying Valgrind to an embedded linux device交叉编译和部署 Valgrind 到嵌入式 linux 设备
【发布时间】:2017-03-21 18:49:37
【问题描述】:

我正在尝试在我的 Fedora VM 上交叉编译 Valgrind,以使其在定制的嵌入式 Linux 设备上运行(使用带有 ARM Cortex M4 CPU 的 Kinetis KL2x MCU 运行 Yacto)。我有一个正确配置的 QT IDE,可以交叉编译并将 QT 项目部署到设备。我想知道交叉编译非 QT 应用程序的最佳途径是什么。我尝试使用现有项目(Valgrind 源代码@@http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2)创建一个新项目(在 QT>New Project>Import Project>Import Existing Project),但我一直收到此错误:

17:20:46: Running steps for project valgrind...
17:20:46: Starting: "/usr/bin/make" all
make: *** No rule to make target `all'.  Stop.
17:20:46: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project valgrind (kit: ----)
When executing step "Make"
17:20:46: Elapsed time: 00:00.

我不知道如何解决它。是否可以仅使用交叉编译器本身(arm-poky-linux-gnueabi-g++)编译 Valgrind?我最好将makefile更改为使用交叉编译器而不是gcc,然后使用scp将文件发送到我的设备(如果是这样,我使用许多不同的makefile中的哪一个?)?还是我错过了更好的方法?该系统没有任何自己的包管理工具或编译器。任何帮助/输入将不胜感激。

交叉编译环境设置后构建配方时出错:

[----@localhost valgrind]$ source /opt/poky/default/environment-setup-cortexa8hf-vfp-neon-poky-linux-gnueabi 
[----@localhost valgrind]$ bitbake -c build valgrind_3.12.0.bb 
Traceback (most recent call last):
  File "/opt/poky/1.8.2/sysroots/i686-pokysdk-linux/usr/lib/python2.7/site.py", line 553, in <module>
    main()
  File "/opt/poky/1.8.2/sysroots/i686-pokysdk-linux/usr/lib/python2.7/site.py", line 535, in main
    known_paths = addusersitepackages(known_paths)
  File "/opt/poky/1.8.2/sysroots/i686-pokysdk-linux/usr/lib/python2.7/site.py", line 266, in addusersitepackages
    user_site = getusersitepackages()
  File "/opt/poky/1.8.2/sysroots/i686-pokysdk-linux/usr/lib/python2.7/site.py", line 241, in getusersitepackages
    user_base = getuserbase() # this will also set USER_BASE
  File "/opt/poky/1.8.2/sysroots/i686-pokysdk-linux/usr/lib/python2.7/site.py", line 230, in getuserbase
    from sysconfig import get_config_var
  File "/opt/poky/1.8.2/sysroots/i686-pokysdk-linux/usr/lib/python2.7/sysconfig.py", line 10, in <module>
    'stdlib': '{base}/'+sys.lib+'/python{py_version_short}',
AttributeError: 'module' object has no attribute 'lib'

【问题讨论】:

    标签: qt makefile compiler-errors cross-compiling valgrind


    【解决方案1】:

    使用 Yocto 工具链交叉编译 valgrind 的示例是:

    # setup workspace
    mkdir workspace && cd workspace
    
    # download Yocto sdk
    wget http://gumstix-yocto.s3.amazonaws.com/sdk.sh
    
    #Install it to workspace/sdk
    ./sdk.sh
    
    source sdk/environment-setup-cortexa8hf-neon-poky-linux-gnueabi
    
    # download valgrind tarball
    wget http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2
    
    # extract source
    tar jxf valgrind-3.12.0.tar.bz2 && cd valgrind-3.12.0
    
    # this fix issue with unknown arm architecture (see http://stackoverflow.com/questions/29514706/cross-compiling-valgrind-for-arm)
    sed -i -e "s#armv7#arm#g" configure
    
    ./configure --host=arm-poky-linux-gnueabi --prefix="$(pwd)/out"
    
    make -j16
    
    make install
    

    这里,安装目录是out,也可以用--prefix="${SDKTARGETSYSROOT}/usr"安装到${SDKTARGETSYSROOT}/usr

    查看this link 了解使用 Yocto SDK 进行交叉编译的基本示例

    【讨论】:

    • 我能够使用此方法的更改版本进行编译,但是尝试在目标设备上执行 valgrind 可执行文件时出现奇怪的错误。
    • 我想指出的是,您在--prefix 中指定的目录路径必须是您要在目标设备上复制 valgrind 的确切路径。
    【解决方案2】:

    我认为最简单的方法是在你的 yocto 构建环境中构建它 (来源 poky/oe_init_build_env) 和构建 valgrind 与

    bitbake -c build valgrind
    

    然后在构建文件夹tmp/work/"plattform"/valgrind/"version"/image/ 中查找文件

    【讨论】:

    • 感谢您的回复,每当我对 valgrind 配方进行 bitbake (bitbake -c build valgrind_3.12.0.bb) 时,我都会收到一些以 File "/opt/poky/1.8.2 结尾的 python 错误" /sysroots/i686-pokysdk-linux/usr/lib/python2.7/sysconfig.py”,第 10 行,在 'stdlib' 中:'{base}/'+sys.lib+'/python{py_version_short}' , AttributeError: 'module' 对象没有属性 'lib'
    • 将完整输出添加到原始帖子
    • 好吧,我不确定你是否有一个有效的环境,你有没有在 valgrind 之前 bitbaked 图像?
    • 不,我没有“烹饪”或刷写设备上的 yacto 发行版或任何在其上运行的应用程序/服务。我只编写和上传 QT 应用程序。
    猜你喜欢
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2012-09-12
    • 1970-01-01
    • 2014-02-09
    相关资源
    最近更新 更多