已使用 -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 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
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 库。
我只想使用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: *** [测试] 错误 1
undefined reference to shm_open'
表示找不到 -lrt
for ARM.
在您的构建命令行中,您需要指定 ARM 构建库的包含和库路径,而不是 Ubuntu。所以 -I/usr/include
和 -L /lib
是错误的。
您还需要为 ARM 构建的 boost,尽管如果您只想使用进程间库,那么 boost headers 应该足够了。但是您需要将它们复制到不同的位置,因为包括来自 /usr/include
的它们还包括特定于 Ubuntu.
您可以使用您提到的交叉编译器 IDE 或可以通过以下方式安装的 arm g++ 交叉编译器:
sudo apt-get install g++-arm-linux-gnueabihf
。还将安装一些 headers 和 ARM 库。