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

Posted

技术标签:

【中文标题】已使用 -L /lib -lrt -lpthread 未定义对“shm_open”的引用【英文标题】:undefined reference to `shm_open' already with -L /lib -lrt -lpthread 【发布时间】:2015-10-23 05:07:42 【问题描述】:

我只想使用 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 shdmemopen_or_create, "Boost1", read_write;

  shdmem.truncate(1024);
  mapped_region regionshdmem, 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

【问题讨论】:

您在-plthread 中有错字。 -I/usr/include 也是多余的。 您没有指定 boost 库。 @Paul R 对不起,这是一个打字错误。即使对于-lpthread,它也有同样的错误。如果我不包含/usr/include,它会告诉我:shared_memory_object.hpp: No such file or directory。谢谢你的帮助:) @Elvis Oric。你好,我想可能是这个原因。您能否帮助您详细说明如何指定它?非常感谢:) -I/usr/include 可能是错误的标题。您正在交叉编译和使用主机头文件(x86 ubuntu?)。您需要找到 ARM 平台的交叉库和头文件。 【参考方案1】:

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 的头文件和库。

【讨论】:

以上是关于已使用 -L /lib -lrt -lpthread 未定义对“shm_open”的引用的主要内容,如果未能解决你的问题,请参考以下文章

MFC库已定义的问题

Android:v7 支持 lib 27.1.0 的编译错误“程序类型已存在”android.support.v7.recyclerview.extensions.ListAdapter

列出已安装的 python 站点包? [复制]

列出已安装的 python 站点包? [复制]

从别的ROM包中提取了一些软件已合并odex已安装成功但是启动闪退,为啥会这样?

centos 卸载已安装的软件