已使用 -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 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: *** [测试] 错误 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”的引用的主要内容,如果未能解决你的问题,请参考以下文章
Android:v7 支持 lib 27.1.0 的编译错误“程序类型已存在”android.support.v7.recyclerview.extensions.ListAdapter