我只想使用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
答案 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的一些头文件和库。