已经使用-L / lib -lrt -lpthread

时间:2015-07-31 13:35:41

标签: c++ boost arm cross-compiling boost-interprocess

我只想使用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 -Wall -c -fmessage-length = 0 -L / lib -lrt -lpthread -fPIC

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

前缀:arm-angstrom-linux-gnueabi -

路径:/ usr / local / oecore-x86_64 / sysroots / x86_64-angstromsdk-linux / usr / bin / armv5te-angstrom-linux-gnueabi

构建控制台:

/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'的未定义引用 /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'的未定义引用 collect2:ld返回1退出状态 make:*** [test]错误1

1 个答案:

答案 0 :(得分:0)

undefined reference to shm_open'表示无法为ARM找到-lrt

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

此外,您还需要为ARM构建的boost,但如果您只想使用进程间库,那么boost头应该足够了。但是您需要将它们复制到不同的位置,因为从/usr/include中包含它们还包括特定于Ubuntu的其他标头。

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