Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
#Круги добра
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Стань частью фэнтези мира! Создай своего мага и погрузись в мир мощных тактических сражений. Оттачивай свое мастерство в онлайн битвах. Всё это в «Битве Магов»!

Битва Магов

Хардкорные, Мидкорные, Ролевые

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • Animalrescueed Animalrescueed 36 постов
  • Oskanov Oskanov 7 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
3
mcnikirikitiki
6 месяцев назад
Лига программистов

Сборка проектов на C/C++: от базовых принципов к продвинутым решениям. Часть II - Инструменты автоматизации сборки⁠⁠

1. Почему важно правильно настраивать сборку?

Правильная настройка сборки — это не просто удобство для разработчиков, но и ключ к успешному развитию проекта. Вот несколько причин:

  • Масштабируемость: Чем больше проект, тем сложнее его поддерживать вручную. Автоматизация сборки позволяет легко добавлять новые файлы и зависимости.

  • Переносимость: Проекты часто запускаются на разных платформах (Linux, Windows, macOS). Хорошая система сборки гарантирует, что код будет работать везде.

  • Совместная работа: Когда в команде несколько разработчиков, автоматизированная сборка помогает избежать проблем с конфигурацией окружения.

  • CI/CD: Современные системы непрерывной интеграции и доставки (CI/CD) требуют четко настроенной сборки. Это ускоряет тестирование и деплой.


2. Универсальные Makefile'ы

В примере выше мы рассмотрели базовый Makefile. Теперь давайте сделаем его более универсальным, чтобы он мог обрабатывать любое количество исходных файлов:

# Имя исполняемого файла

TARGET = program

# Компилятор и флаги

CXX = g++

CXXFLAGS = -Wall -std=c++17

LDFLAGS =

# Список исходных файлов

SRCS = $(wildcard *.cpp)

OBJS = $(SRCS:.cpp=.o)

# Основная цель

all: $(TARGET)

# Как собирать программу

$(TARGET): $(OBJS)

$(CXX) $(OBJS) $(LDFLAGS) -o $(TARGET)

# Правило для объектных файлов

%.o: %.cpp

$(CXX) $(CXXFLAGS) -c $< -o $@

# Очистка

clean:

rm -f $(OBJS) $(TARGET)

Здесь используется функция wildcard, которая автоматически находит все .cpp файлы в директории. Это делает Makefile более гибким.


3. Работа с зависимостями

3.1. Установка библиотек через пакетный менеджер

Это самый простой способ, но он имеет ограничения:

  • Разные дистрибутивы Linux могут использовать разные пакетные менеджеры (apt, yum, pacman).

  • Версии библиотек в репозиториях могут быть устаревшими.

Пример установки libcurl:

sudo apt-get install libcurl4-openssl-dev

3.2. Локальная компиляция библиотек

Если вы хотите избежать проблем с версиями библиотек, лучше скомпилировать их локально. Например, для libcurl:

wget https://curl.se/download/curl-8.11.1.tar.bz2

tar -jxf curl-8.11.1.tar.bz2

cd curl-8.11.1

./configure --with-openssl

make

Теперь используйте локальные пути при компиляции:

g++ curlexample.cpp -o curlexample \

-I ./curl-8.11.1/include \

-L ./curl-8.11.1/lib/.libs \

-l curl


4. Продвинутые инструменты сборки

4.1. CMake

CMake — это мощный инструмент, который поддерживает кроссплатформенную сборку. Вот пример CMakeLists.txt для проекта с зависимостью от libcurl:

cmake_minimum_required(VERSION 3.10)

project(CurlExample LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)

set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(CURL REQUIRED)

add_executable(CurlExample curlexample.cpp)

target_link_libraries(CurlExample PRIVATE CURL::libcurl)

Чтобы собрать проект:

mkdir build

cd build

cmake ..

make

4.2. Meson

Meson — это современный инструмент, который генерирует файлы для Ninja. Пример meson.build:

project('CurlExample', 'cpp')

# Поиск libcurl

dependency('libcurl')

executable('curlexample', 'curlexample.cpp', dependencies: ['libcurl'])

Сборка:

meson setup build

cd build

ninja

4.3. SCons

SCons использует Python для написания рецептов. Пример SConstruct:

env = Environment()

env.Append(LIBS=['curl'])

env.Program(target='curlexample', source='curlexample.cpp')

Сборка:

scons


5. Docker для изоляции сборки

Docker позволяет создавать изолированные контейнеры с нужной версией ОС и библиотек. Это особенно полезно для старых проектов или CI/CD.

Пример Dockerfile:

FROM ubuntu:20.04

RUN apt-get update && apt-get install -y \

build-essential cmake git libcurl4-openssl-dev

WORKDIR /app

COPY . .

RUN mkdir build && cd build && cmake .. && make

Сборка и запуск:

docker build -t myproject .

docker run -it --rm -v $(pwd):/app myproject


6. Советы по оптимизации сборки

  1. Инкрементальная сборка: Не пересобирайте весь проект, если изменился только один файл. Инструменты вроде make и ninja поддерживают это "из коробки".

  2. Параллельная сборка: Используйте флаг -j для ускорения сборки на многоядерных процессорах:

    make -j$(nproc)

  3. Кэширование зависимостей: Если вы используете Docker, сохраняйте зависимости в кэше, чтобы не скачивать их заново при каждой сборке.

  4. Статическая vs Динамическая линковка: Выбирайте подходящий метод в зависимости от ваших целей:

    • Статическая линковка создает автономный исполняемый файл, но увеличивает его размер.

    • Динамическая линковка делает файл меньше, но требует наличия библиотек на целевой системе.


7. Заключение

Настройка сборки проекта — это инвестиция в будущее. Чем раньше вы потратите время на её автоматизацию, тем проще будет развивать проект. Вот несколько рекомендаций:

  • Для небольших проектов используйте Makefile.

  • Для средних и больших проектов выбирайте CMake или Meson.

  • Если вам нужно тестировать сборку в разных окружениях, используйте Docker.

  • Всегда документируйте процесс сборки, чтобы другие разработчики могли легко подключиться к проекту.

Помните: хороший процесс сборки — это залог стабильности и успеха вашего проекта!

Показать полностью
[моё] Программирование Гайд IT Windows C++ Сборка Длиннопост
0
1221
odisseylaertov
odisseylaertov
6 месяцев назад

Вращающийся монохромный монитор с кинескопом RADIUS PIVOT 14", 1991 г⁠⁠

Монитор Компьютер 90-е Раритет Кинескоп Вертикальное видео Программирование Элт Windows Видео Короткие видео
193
3
noname.001
noname.001
6 месяцев назад

Следующий вариант⁠⁠

ну вот еще одна итерация разработки.

Добавил возможность создания связей между компонентами и прочие плюшки в виде удобного переворота слоев компонента.

@SinijTraktorist, уже лучше?

С высоты своего опыта кажется что все достаточно комфортно и удобно. Левой рукой меняешь слои, мышой ставишь точки.. Не даром прошли науки человеко-машинного взаимодействия.

Но теперь самый главный вопрос. Как эти сети вывести. Опыты с DipTrace ни к чему не привели. Софтина кривая и толком так и не смогла принять компоненты которые за рамками существующих библиотек корпусов. Альтиум тоже окозался таким же дерьмом. Собственно он всегда таким и был со времен PCAd. (а пафоса то).

Давайте дальше идеи. Вывод в схему это типично творческая задача. готовых решений тут нет. По крайней мере таких которые могут дать визуально понятное для человека.

ГПТ предлагает Force-Directed Placement но это явно будет какое то машинное произведение.

В общем жду идет от заинтересованных лиц.

Программу и исходники найдете по ссылке https://disk.yandex.ru/d/sBYcaJ2TPVvw_w

ну и на последок:

Показать полностью
[моё] Эксперимент Инженер Программирование Разработка Windows IT Программа Видео Без звука
17
4
mcnikirikitiki
6 месяцев назад
Лига программистов

Основы сборки проектов на C/C++⁠⁠

Прежде чем читать мою статью - реши для себя, зачем ты это делаешь. Даже если ты просто нормальный человек, лишним не будет.

Если вы настоящий профессионал программирования, то зачем вы тут сидите и читайте статью на пикабу? Если вы ради интереса зашли почитать, то претензий ноль, но если вы просто захотели задушить нового пользователя Пикабу минусами, то немедленно покиньте статью, вам однозначно интересно не будет.

Здравствуйте, мои маленькие любители программирования!

Давайте разберем основы сборки проектов на Си/Си++ простым языком:

  1. Основные понятия:

  • Программа собирается из множества файлов

  • Есть два типа библиотек:

    • Статические (.a, .lib) - код встраивается в exe-файл

    • Динамические (.so, .dll) - подгружаются при запуске

  1. Этапы сборки:

// hello.cpp

#include <iostream>

void say_hello() {

std::cout << "Hello, world!" << std::endl;

}

// main.cpp

void say_hello();

int main() {

say_hello();

return 0;

}

Компиляция:

# Компилируем каждый файл отдельно

g++ -c hello.cpp -o hello.o

g++ -c main.cpp -o main.o

# Связываем объектные файлы в исполняемый

g++ hello.o main.o -o program

  1. Работа с библиотеками:

Создание статической библиотеки:

# Создаем объектный файл

g++ -c mylib.cpp -o mylib.o

# Архивируем в статическую библиотеку

ar rcs libmylib.a mylib.o

Использование:

g++ main.cpp -L. -lmylib -o program

  1. Особенности C++

Искажение имен (name mangling):

// В исходном коде

void my_function(int a);

// После компиляции

_Z11my_functioni

  1. Управление зависимостями

Пример Makefile:

program: main.o hello.o

g++ main.o hello.o -o program

main.o: main.cpp

g++ -c main.cpp

hello.o: hello.cpp

g++ -c hello.cpp

clean:

rm *.o program

Основные команды:

  • make - собрать проект

  • make clean - очистить скомпилированные файлы

Это базовые принципы, которые помогут начать работать с проектами на Си/Си++. В следующих частях рассмотрим более сложные случаи и современные инструменты сборки.

Показать полностью
[моё] Программирование IT Программист Сборка Linux Windows Гайд Текст
2
TECHLiveHACK
TECHLiveHACK
7 месяцев назад

Как зашифровать флешку?⁠⁠

Как зашифровать флешку? Программа, Гайд, Windows, Linux, Инновации, Flash, Карта памяти, Информационная безопасность, Технологии, Программирование, Защита, IT, Telegram (ссылка)

VeraCrypt – это программное обеспечение для шифрования дисков с открытым исходным кодом для Windows, Mac OSX и Linux. Вы можете зашифровать системный диск или же создать зашифрованный локальный диск.

Чтобы зашифровать флешку:

1. В главном окне программы нажмите кнопку «Создать том».

2. Выберите опцию «Зашифровать несистемный раздел/диск» и тапните «Далее».

3. Выберите опцию «Обычный том VeraCrypt».

4. Затем нажмите «Устройство…» для выбора сменного носителя.

5. Отметьте нужную флешку и подтвердите ваш выбор.

6. Активируйте опцию «Создать и отформатировать зашифрованный том» → «Далее».

7. Все данные на накопителе будут удалены и флешка будет полностью отформатирована.

Далее вы сможете выбрать желаемый алгоритм шифрования и алгоритм хеширования. Можно оставить все значения по умолчанию. Подтвердите размер зашифрованного тома нажав на кнопку «Далее». Затем задайте пароль тома и отформатируйте флешку.

Источник: https://t.me/TechLiveHack/849

Показать полностью
Программа Гайд Windows Linux Инновации Flash Карта памяти Информационная безопасность Технологии Программирование Защита IT Telegram (ссылка)
6
Вопрос из ленты «Эксперты»
tablepedia
7 месяцев назад
Web-технологии

Генерация HTML файлов с помощью Excel и бесплатного OpenOffice Calc⁠⁠

Я в феврале 2025 года работаю над проектом "Генерация HTML файлов с помощью табличного редактора". Напишите, пожалуйста, в комментариях ссылки на похожие проекты. Точнее, на файл табличного редактора для генерации HTML.

[моё] Вопрос Спроси Пикабу Программа Программирование Microsoft Excel HTML Основы HTML Windows Файл Генерация Таблица Сайт IT Web Web-программирование Приложение CSS Дизайн Веб-дизайн Графический дизайн Короткопост Текст
14
8
0sadchi
0sadchi
7 месяцев назад
Лига Разработчиков Видеоигр

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем⁠⁠

Чтобы сформировать понимание, как происходит получение списка процессов, просто заглянем в исходники самого Cheat Engine.

Здесь у нас есть процедура GetProcessList, в которую мы подаем массив строк, в который она запишем нам имена и айди процессов.

Первое, на что обратим внимание - структура, куда записывается информация о процесе, в СЕ она выглядит так

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

Мы можем ее записать так.

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

Далее в процедуре идет блок с переменными

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

Как итог я оставил так

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

Для замены под C++ объекта ProcessList: TStrings, я использовал std::unordered_map<std::wstring, PProcessListInfo>& process_list. Потому что в коде, была логика схожая с мапой, когда у нас по имени процесса идет связка с объектом, содержащим информацию о нем (фактически один ProcessID..)

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

Что у нас эквивалентно

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

И в конце при необходимости это включается в лист

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

Заменил на

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

По этой процедуре особо добавить и нечего, она просто делает снимок и пробегается по процессам, выгружая данные..

Но тут мое любопытство увело меня в сторону от Cheat Engine, и я решил посмотреть, что там у Process Hacker, это утилита позволяет работать с процессами. Самой интересной частью является - список модулей. Потому, что там сразу можно увидеть кто-где и какой размер в памяти занимает каждый из них.

Через поиск по файла по фразе EnumModules я вышел на вот такую вот функцию

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

так же у нее есть 32битная реализация

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

Результатом работы оных будет вот такая вот структура

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост
Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

Самыми интересными для нас будут PVOID DllBase - начало модуля относительно процесса , ULONG SizeOfImage - размер модуля (сколько байт он занимает внутри процесса) и UNICODE_STRING FullDllName. Но с именем все не так просто. Структура выглядит так

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

Казалось бы, вот же она.. PWSTR Buffer строка.. выводись в студаут!! А вот и нет, здесь находится адрес в чужом пространстве, чтобы прочитать эту строку, придется сделать следующее.

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

И тут я на радостях побежал смотреть все модули, но не тут-то было.. Если получить список процессов вполне себе легитимная процедура, то читать память другого процесса уже не всегда дозволяется авторами софта. Но на этот случай у ProcessHacker есть свой собственный драйвер, на то он и хакер.

Все, до чего я докопался - это метод

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

Данные о драйвере выглядят так

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

Но, к сожалению, с наскока подключиться к драйверу не удалось и лучший ответ, который я получилъ

Свой Cheat Engine с нуля! Часть 1 - Получаем список процессов и модули в нем Windows, Программирование, Cheat Engine, C++, Hacking, Длиннопост

По итогу, я решил пока оставить драйвер и заняться гуевой частью, чтобы сразу под каждый инструмент прорабатывать внешний вид, как, что и куда будет выводиться.

Конец! А кто слушал - можете прокачать свои навыки на крутейшем курсе по реверсу ММОРПГ :)

Показать полностью 15
[моё] Windows Программирование Cheat Engine C++ Hacking Длиннопост
2
Yarkus
Yarkus
7 месяцев назад

Чуть темнеет монитор при запуске программ(я бы даже сказал игр):Stalkraft, BlueStacks⁠⁠

Чуть темнеет моник после запуска:Stalkraft, BlueStacks. Подскажите,что за проблема(Windows 11pro(активированна))

Компьютерная помощь Игровой ПК Компьютер Windows Программирование Программист Игры Компьютерные игры Монитор Текст
6
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии