Неопределенная ссылка на `shm_open'уже с -L /lib -lrt -lpthread
Я просто хочу использовать библиотеку boost для создания общей памяти в системе ARM. Он отлично работает, если вы хотите скомпилировать его только под Ubuntu. Однако, когда я хочу сделать кросс-компиляцию с помощью CCSv6 от TI и набора инструментов angstrom, он продолжает выдавать ошибки.
Поскольку я не знаю, как написать make-файл для кросс-компиляции, я думаю, что использование 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
Среда IDE под названием Code Composer Studio имеет параметры кросс-компиляции, как показано ниже:
Префикс: 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
1 ответ
undefined reference to shm_open'
означает, что не может найти -lrt
для АРМ.
В командной строке вашей сборки вы должны указать пути включения и библиотеки для библиотек ARM, а не для Ubuntu. Так -I/usr/include
а также -L /lib
неправильно.
Также вам нужен встроенный boost для ARM, хотя если вы просто хотите использовать межпроцессную библиотеку, то заголовков boost должно быть достаточно. Но вам нужно скопировать их в другое место, потому что в том числе из /usr/include
включает также другие заголовки, специфичные для Ubuntu.
Вы можете использовать упомянутую кросс-компиляторную IDE или установить кросс-компилятор g ++, который вы можете установить:sudo apt-get install g++-arm-linux-gnueabihf
, Также будут установлены некоторые заголовки и библиотеки для ARM.