代码之家  ›  专栏  ›  技术社区  ›  Peizheng Ma

对“shm_open”的未定义引用已使用-L/lib-lrt-lpthread

  •  0
  • Peizheng Ma  · 技术社区  · 9 年前

    我只想使用boost库在ARM系统上创建共享内存。如果您只想在ubuntu下编译它,它可以很好地工作。然而,当我想用TI的CCSv6和angstrom工具链交叉编译它时,它会不断地推送错误。

    因为我不知道如何为交叉编译编写makefile,所以我认为使用TI自己的IDE可能是避免进一步问题的好选择。

    这是我的代码并打印出构建控制台。

    #include <boost/interprocess/shared_memory_object.hpp>
    #include <boost/interprocess/mapped_region.hpp>
    #include <iostream>
    
    using namespace boost::interprocess;
    
    int main()
    {
    
      shared_memory_object shdmem{open_or_create, "Boost1", read_write};
    
      shdmem.truncate(1024);
      mapped_region region{shdmem, read_write};
    
    }
    

    g++-std=c++0x-I/usr/include-O0-g3-墙-c-fmessage长度=0-L/lib-lrt-lpthread-fPIC

    名为Code Composer Studio的IDE具有如下交叉编译设置:

    前缀:arm angstrom linuxgnueabi-

    路径:/usr/local/ocore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/bin/armv5te angstrom-linuxgnueabi

    生成控制台:

    /usr/include/boost/interprocess/shared_memory_object。hpp:309:未定义的引用 shm_open' /usr/include/boost/interprocess/shared_memory_object.hpp:315: undefined reference to shm_open(shm_open)' /usr/include/boost/interprocess/shared_memory_object。hpp:327:未定义的引用 shm_open' /usr/include/boost/interprocess/shared_memory_object.hpp:334: undefined reference to shm_open(shm_open)' collect2:ld返回1退出状态 make:***[测试]错误1

    1 回复  |  直到 9 年前
        1
  •  0
  •   doqtor    9 年前

    undefined reference to shm_open' 表示找不到 -lrt 用于ARM。

    在构建命令行中,您需要指定ARM构建库的include和库路径,而不是Ubuntu库。所以 -I/usr/include -L /lib 是错误的。

    此外,您还需要为ARM构建boost,尽管如果您只想使用进程间库,那么boost头就足够了。但您需要将它们复制到不同的位置,因为包括它们 /usr/include 还包括Ubuntu特有的其他头文件。

    您可以使用您提到的交叉编译器IDE或arm g++交叉编译器,您可以通过以下方式安装: sudo apt-get install g++-arm-linux-gnueabihf 。也将安装ARM的一些标头和库。