Неопределенная ссылка на `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 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: *** [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.

Другие вопросы по тегам