Я написал код на c++ для raspberry pi , в котором задействованы библиотеки sfml и rf24. Если для компиляции кода под rf24 нужны такие опции Код (Bash): g++ -Ofast -Wall RF24_scanner.cpp -lrf24 -o RF24_scanner Основными из которых являются -Ofast (описание данной опции я не нашёл ни в интернете ни в справке) и -lrf24 подключение библиотеки. А для sfml компиляция и трансляция проходит в два этапа: Код (Bash): g++ -c main.cpp g++ main.o -o sfml-app -lsfml-graphics -lsfml-window -lsfml-system В связи с этим вопрос : Как компилировать и собирать получившийся код? Спойлер: Код Код (C++): /* cd /home/ftp_user/cpp/graf sudo g++ -c graf4.cpp sudo g++ graf4.o -o graf4e -lsfml-graphics -lsfml-window -lsfml-system */ //#include <unistd.h> #include <SFML/Graphics.hpp> #include <SFML/System.hpp> #include <vector> #include <iostream> #include <cstdlib> #include <RF24/nRF24L01.h> /* * Подключаем библиотеку для работы с nRF24L01+ */ #include <RF24/RF24.h> using namespace std; /* * Конфигурация оборудования */ #define BCM_PIN 25 #define SPI_DEV 0 #define NUM_CHANNELS 126 const int per0=20; //50 герц sf::Clock gen; // starts the clock uint8_t values[NUM_CHANNELS]; const int numReps = 100; //------------функции----------- int milliss() { float t=gen.getElapsedTime().asMilliseconds(); //float t=gen.getElapsedTime().asMicroseconds(); return (int)abs(t); } int last0,vrem; int main() { sf::RenderWindow window(sf::VideoMode(1020, 400), "SFML works!");// x,y sf::CircleShape shape(100.f); shape.setFillColor(sf::Color::Green); // sf::Clock clock; /* * Создаём объект radio для работы с библиотекой RF24, * указывая номера вывода CE и SPI порта */ RF24 radio(BCM_PIN, SPI_DEV); /* * Инициируем работу nRF24L01+ */ radio.begin(); radio.setAutoAck(false); /* * Вход в режиме ожидания */ radio.startListening(); radio.stopListening(); last0=milliss(); while (window.isOpen()) { sf::Event event; // if(milliss()-last0>per0){ while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } vector<sf::RectangleShape> ppd{126}; // memset(values, 0, sizeof(values)); for (int k = 0; k < numReps; ++k) { for (int i = 0; i < NUM_CHANNELS; ++i) { /* * Выбор канала */ radio.setChannel(i); /* * Послушать немного */ radio.startListening(); delayMicroseconds(100); radio.stopListening(); /* * Проверка наличия несущей частоты на выбранном канале (частоте). */ if (radio.testCarrier()) { ++values[i]; } } } for(int n=0;n<126;n++){ ppd[n].setSize( sf::Vector2f(7,1+values[n])); ppd[n].setPosition(1+(8*n),170); } // ppd.setPosition(50+(100*n),0); // Отрисовка окна window.clear(sf::Color::Black); for(int n =0;n<126;n++){window.draw(ppd[n]);} // window.draw(ppd[2]); window.display(); // last0=milliss(); // } } return 0; } Я пробовал разные варианты, так если подключать rf24 на втором этапе то компилятор будет ругаться на первом этапе, если подключать на первом этапе и на втором , то вроде не ругается, но программа запускается и сразу же закрывается. В один этап собрать вообще ни как. Слышал, что можно прописать все опции в фаиле make... P.S. Программа должна была выводить уровень сигнала на каналах в виде столбцов. Вот так выглядит: Если что это рандомная генерация.
Я эту опцию сразу выпилил. Код (Bash): g++ -c -Wall ${file} -lrf24 g++ ${name}.o -o ${name} -lsfml-graphics -lsfml-window -lsfml-system -lrf24 С такими опциями компилируется, но ошибается вроде как на этапе инициализации nrf.
Пока решаю данную проблему следующим образом : есть две программы одна записывает данные в файл ,другая читает и выводит на экран.
Не совсем понятна Ваша проблема. Но, если нужно собрать программу из разных исходников, то сначала компилируются исходники (обязательно должна присутствовать опция '-c'), а потом всё линкуется в один файл. Должно быть примерно так (я не в курсе особенностей Вашего проекта, поэтому пример скорее будет не рабочим): Код (Bash): # Компилируем RF24_scanner.cpp, получаем RF24_scanner.o g++ -c -Ofast -Wall RF24_scanner.cpp -o RF24_scanner.o # Компилируем main.cpp, получаем main.o g++ -c main.cpp -o main.o # Линкуем всё в одну программу sfml-app g++ RF24_scanner.o main.o -o sfml-app -lsfml-graphics -lsfml-window -lsfml-system -lrf24