компиляция — как скомпилировать blacklib (c ++)

Я использую beaglebone и хочу написать программу для выборки АЦП. Я пытаюсь использовать blacklib (http://blacklib.yigityuce.com/index.html) отсюда. Я клонировал мерзавца:
https://github.com/yigityuce/BlackLib

и попытался скомпилировать пример с

g++ exampleAndTiming.cpp -std=c++11

Это, однако, дает мне массу ошибок, подобных этим:

In file included from exampleAndTiming.cpp:33:0:
exampleAndTiming/exampleAndTiming_GPIO.h: In function 'void exampleAndTiming_GPIO()':
exampleAndTiming/exampleAndTiming_GPIO.h:97:12: error: 'sleep' was not declared in this scope
sleep(1);
^
In file included from exampleAndTiming.cpp:34:0:
exampleAndTiming/exampleAndTiming_ADC.h: In function 'void exampleAndTiming_ADC()':
exampleAndTiming/exampleAndTiming_ADC.h:67:16: error: 'usleep' was not declared in this scope
usleep(1000);
^

поэтому я включаю unistd.h (в exampleAndTiming.cpp), но затем я получаю такие ошибки:

/tmp/ccbgiXE9.o: In function `exampleAndTiming_GPIO()':
exampleAndTiming.cpp:(.text+0x50): undefined reference to `Timing::startMeasure(std::string)'
exampleAndTiming.cpp:(.text+0x80): undefined reference to `BlackLib::BlackGPIO::BlackGPIO(BlackLib::gpioName, BlackLib::direction, BlackLib::workingMode)'
exampleAndTiming.cpp:(.text+0xbc): undefined reference to `Timing::endMeasure(std::string)'
exampleAndTiming.cpp:(.text+0xec): undefined reference to `BlackLib::BlackGPIO::BlackGPIO(BlackLib::gpioName, BlackLib::direction, BlackLib::workingMode)'
exampleAndTiming.cpp:(.text+0x104): undefined reference to `BlackLib::BlackGPIO::BlackGPIO(BlackLib::gpioName, BlackLib::direction, BlackLib::workingMode)'
exampleAndTiming.cpp:(.text+0x11c): undefined reference to `BlackLib::BlackGPIO::BlackGPIO(BlackLib::gpioName, BlackLib::direction, BlackLib::workingMode)'
exampleAndTiming.cpp:(.text+0x158): undefined reference to `Timing::startMeasure(std::string)'

Я смотрел на некоторые примеры библиотек и компилировал их, но не могу понять все это. Я уже скомпилировал множество программ на c ++ и c, но я не могу заставить их работать. Так что любая помощь будет оценена.

1

Решение

ПОЛНОЕ РУКОВОДСТВО о том, как скомпилировать BLACKLIB непосредственно на BEAGLEBONE BLACK (rev. C) с ANGSTROM:

Программы:

шпатлевка — общаться с BBB из Windows (используя SSH с USB-кабелем)

WinSCP — управлять (загружать, создавать, удалять) файлами прямо на BBB

Code :: Blocks — писать программы на C ++

по выбору

Термит 2,9 — отправлять и получать сообщения UART от UART<-> USB-конвертер (на самом деле для этого можно использовать Putty)

1) получить BlackLib от официальный сайт

2) разархивируйте библиотеку и скопируйте следующие файлы в отдельную папку:

BlackADC.cpp, BlackADC.h, BlackCore.cpp, BlackCore.h, BlackDef.h, BlackErr.h, BlackGPIO.cpp, BlackGPIO.h, BlackI2C.cpp, BlackI2C.h, BlackLib.h, BlackPWM.cpp, BlackPWM.h, BlackSPI.cpp, BlackSPI.h, BlackUART.cpp, BlackUART.h

3) открыть следующие файлы в Code :: Blocks BlackUART.cpp, BlackSPI.cpp, BlackI2C.cpp и добавить

#include <unistd.h>

сразу после #include "BlackUART.h", «unistd.h» включает в себя все функции, такие как sleep (), open (), close (), … которые в противном случае кажутся отсутствующими

4) создайте свою собственную программу main.cpp, вы можете использовать следующий код для тестирования UART1 и UART2:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#include <sstream>
#include <string>
#include <iostream>#include "BlackLib.h"

int main(){

std::string writeToUart1;
std::string writeToUart2;
std::string readFromUart1;
std::string readFromUart2;
int counter;
std::ostringstream os1;
std::ostringstream os2;

BlackLib::BlackUART  Uart1(BlackLib::UART1,
BlackLib::Baud9600,
BlackLib::ParityEven,
BlackLib::StopOne,
BlackLib::Char8 );
// Pins on BeagleBone Black REV C
// UART1_RX -> GPIO_15 (P9.24)
// UART1_RX -> GPIO_14 (P9.26)

BlackLib::BlackUART  Uart2(BlackLib::UART2,
BlackLib::Baud9600,
BlackLib::ParityEven,
BlackLib::StopOne,
BlackLib::Char8 );
// Pins on BeagleBone Black REV C
// UART2_RX -> GPIO_2 (P9.22)
// UART2_RX -> GPIO_3 (P9.21)

std::cout << "Program UART start" << std::endl << std::flush;

Uart1.open( BlackLib::ReadWrite | BlackLib::NonBlock );
Uart2.open( BlackLib::ReadWrite | BlackLib::NonBlock );

counter = 0;

while (true){

os1.str("");
os1.clear();
os1 << "Uart1 to TX: " << counter << "\n";
writeToUart1 = os1.str();
Uart1 << writeToUart1;

readFromUart1 = "";
Uart1 >> readFromUart1;
if (readFromUart1.compare("") != 0){
std::cout << "Uart1 from RX: " << readFromUart1 << "\n" << std::flush;
}
Uart1.flush( BlackLib::bothDirection );
counter++;
sleep(2);os2.str("");
os2.clear();
os2 << "Uart2 to TX: " << counter << "\n";
writeToUart2 = os2.str();
Uart2 << writeToUart2;

readFromUart2 = "";
Uart2 >> readFromUart2;
if (readFromUart2.compare("") != 0){
std::cout << "Uart2 from RX: " << readFromUart2 << "\n" << std::flush;
}
Uart2.flush( BlackLib::bothDirection );
counter++;
sleep(2);}

return 1;
}

5) сохраните main.cpp в той же папке, что и файлы BlackLib

6) используя WinSCP, создайте каталог на BBB (например, / home / uart) и скопируйте все файлы BlackLib и main.cpp в эту папку

7) Откройте Putty и перейдите к папке:
cd /home/uart

8) скомпилируйте файлы, используя:
gcc *.cpp -o main -std=c++11

9) запустить программу:
./main

10) подключите провода к UART<-> Конвертер USB и BBB. Выход из BBB должен выглядеть следующим образом:

Uart2 to TX: 1   OR   Uart1 to TX: 0
Uart2 to TX: 3   OR   Uart1 to TX: 2

в зависимости от подключения проводов

2

Другие решения

Кажется, мне удалось это исправить самостоятельно, какое-то поведение, похожее на noob, не включающее все файлы cpp, но даже больше, мне также нужно было добавить #include в BlackCore.h, чтобы избежать множества неопределенных ошибок функций.

последняя команда:

g++ exampleAndTiming.cpp exampleAndTiming/Timing.cpp BlackADC.cpp BlackCore.cpp BlackGPIO.cpp BlackI2C.cpp BlackPWM.cpp BlackSPI.cpp BlackUART.cpp -std=c++11

Вероятно, мне нужно было бы сделать make-файл для отдельной компиляции библиотеки, время заняться копанием и изучением.

1

Я создатель BlackLib, Yiğit YÜCE. Вы нашли свой ответ самостоятельно. Makefile, который вы упомянули в своем комментарии, будет опубликован в ближайшее время.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector