К основному контенту

Сообщения

C++. Создание динамически подключаемой библиотеки so с помощью CMake

Мини инструкция, т.к. потратил пару часов на разрозненной информации. Библиотека. Обязательно пишем extern "C". Если не указать, то компилятор добавит символы к имени и функция dsym не найдет ничего. #ifdef WINDOWS #define EXPORT extern "C" __declspec(dllexport) #else #define EXPORT extern "C" //__attribute__((visibility ("default"))) #endif // WINDOWS EXPORT int Add(int a, int b) { return a + b; } Программа в которой загружаем библиотеку #ifdef WINDOWS #define IMPORT __declspec(dllimport) IMPORT int Add(int a, int b); #else     #define IMPORT     #include <dlfcn.h> #endif // WINDOWS #include "TestLinuxSharedLib.h" using namespace std; int main() { #ifndef WINDOWS     void* handle;     int (*cosine)(int,int);     //void* cosine;     char* error;     handle = dlopen("./libMySharedLib.so", RTLD_NOW);     if (!handle) {         cout << "not found libMySharedLib.so" &l
Недавние сообщения
Ставим web-консоль администриования Linux - Webmin Прочитатать что такое webmin можно в Wiki Для начала нам необходим полность работающий apt-get ( инструкция была ранее в блоге ). Далее в файле /etc/apt/sources.list прописываем новый репозиторий: deb http://download.webmin.com/download/repository sarge contrib Затем переходим в какую нибудь временную папку (у меня это /opt/tmp и скачиваем ключ): # cd /opt/tmp #  wget http://www.webmin.com/jcameron-key.asc # apt-key add jcameron-key.asc Обновляем список пакетов: # apt-get update Далее нам необходимо прописать переменную содержащую порт webmin, т.к. порт 10000 (по умолчанию) уже занят и пакет ставится не будет: # export WEBMIN_PORT=10001 Теперь ставим сам webmin: # apt-get install webmin В процессе установки будет установленно очень много пакетов. Вся установка у меня заняла минут 15. (была уже установлена часть пакетов). После установки будет написан web адрес для доступа и то что для вход
Делаем полностью работоспособный apt-get Для начала все папки и файла для apt-get должны быть созданы по  этой  инструкции. При установке любого пакета с помощью apt-get выходит ошибка о том, что невозможно установить libc6. Я изучил скрипт предустановки libc6 и оказалось что библиотека не ставится из-за того, что путь /lib64 является символической ссылкой на /mnt/apps/lib. Сначала я хотел сделать новый раздел на диске который будет содержать корневую директорию, но без потери данных это оказалось не возможно, т.к. используется файловая система xfs которую нельзя уменьшить. Второй вариант - сделать корневую систему на флешке и изменить скрипты initrd. Не стал пока этими заниматься. Остановился на третьем варианте: монтирование папки в папку. (все описанное легче делать через MC) 1. Для начала создавим папку которая будет содержать часть нашего корневого раздела: /mnt/system/newroot 2. Создадим в ней папку с нашими библиотеками: /mnt/system/newroot/lib64 3. Скопируем все
Transmission перестал качать и отдавать торенты Заметил что transmission перестал качать и отдавать торенты. В качестве ошибки было указано "could not conect to tracker". Настройки я не менял, т.е. работало, а потом перестало. Удалил старый файл settings.json и все заработало. Путем сравнения старого и нового файла настроек transmission выяснил, что причиной явля ется параметр  bind-address-ipv4. В нем почему-то, сам по себе, прописался ip адресс. Указал в качестве параметра "0.0.0.0" и все заработало.
Стандартные способы восстановления ПО HMNHD CE, предусмотренные разработчиком.  Загрузка Linux происходит в несколько этапов. Сначала находится загрузчик, который загружает ядро Linux в память и инициализирует диск initrd. Далее вызывается скрипт linuxrc, в котором монтируются остальные файловые системы и происходит загрузка основной ОС. Разработчики встроили в скрипт linuxrc возможность восстановления с USB флешки. Если у вас не повреждены ядро и диск initrd (не перезаписаны неработающими версиями), то вы можете восстановитель ОС выполнив ряд простых действий. 1. Отформатировать USB флешку в файловую систему FAT. 2. Создать на флешке путь: /emctools/hmnhd_images Далее есть две опции, которые можно использовать как раздельно так и вместе 3.1. С распаковкой из архива. 3.1.1. Скачиваем архив  imager_3.1.14.995.tgz  (предоставленный пользователем  Mijzelf  в  теме  восстановления  устройства   )и записываем его в папку  /emctools/hmnhd_images 3.2. Без распаковки из а
Уменьшаем громкость HDD   ST32000542AS стоящего в HMNHD CE Почитал отзывы на модель жесткого диска ST32000542AS. У многих стучит. Это паркуется головка и связно это с системой Advanced Power Management. Для решения проблемы со стуками, необходимо отключить данную систему: # hdparm -B 255 /dev/sda Так же с  помощью  команды hdparm можно поменять другие праметры жесткого диска. Описание параметров здесь здесь Например есть параметр -М (Automatic Acoustic Management) он "контролирует уровень шума". По умолчанию данная система отключена. Поставим самый тихий режим: # hdparm -M 128 /dev/sda
Разбираем и модифицируем прошивку, собираем ядро для HMNHD CE Все приведенные ниже действия будут выполняться в ОС Debian . Я ставил себе минимальный образ в 40 Мб на Virtualbox и доустанавливал необходимые пакеты. Так же необходимо будет поставить стандартные пакеты кросc-компиляции для Debian (описание установки  здесь ) Модифицируем прошивку. Скачиваем прошивку с оф. сайта, которую будет препарировать.(для примера эту ). # openssl enc -d -aes-128-cbc -in hmnhd-3.1.14.995.tgz -out hmnhd-3.1.14.995-decrypt.tgz -k EMCNTGSOHO распаковываем: # tar xzvf  hmnhd-3.1.14.995-decrypt.tgz В итоге мы получим все файлы прошивки.  initrd и zImage являются пакетами uboot. apps и oem - обычными образами. Смонтируем initrd в какую-нибудь папку. Для начала вычленим архив: # dd if=initrd of=initrdimg.gz bs=1 skip=64 распакуем: # tar xzvf  initrdimg.gz монтируем: # mount -o loop initrdimg /tmp/initrd Теперь мы можем менять файлы в данном разделе. После из