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

undefined reference to `shm_open' already with -L /lib -lrt -lpthread

我只想使用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 toshm_open 的引用' /usr/include/boost/interprocess/shared_memory_object.hpp:327: 对 shm_open' /usr/include/boost/interprocess/shared_memory_object.hpp:334: undefined reference toshm_open 的未定义引用 collect2: ld 返回 1 退出状态 make: *** [测试] 错误 1

undefined reference to shm_open' 表示找不到 -lrt for ARM.

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

您还需要为 ARM 构建的 boost,尽管如果您只想使用进程间库,那么 boost headers 应该足够了。但是您需要将它们复制到不同的位置,因为包括来自 /usr/include 的它们还包括特定于 Ubuntu.

的其他 headers

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