|
Использование LTTng для прозрачной трассировки приложений в Ubuntu Linux (доп. ссылка 1) |
[комментарии]
|
| Система трассировки LTTng (http://lttng.org/) работает на уровне Linux-ядра и отличается минимальным влиянием на работу профилируемого приложения, что позволяет приблизить условия работы данного приложения к его выполнению без использования трассировки (например, позволяет выявлять проблемы с производительностью в программах, работающих в реальном режиме времени).
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Как подружить plPlot и wxWidgets под ОС Windows |
Автор: KoD
[комментарии]
|
| ++ 0) Введение.
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Создание программ под SynapseOS |
Автор: Арен Елчинян
[комментарии]
|
| Пример создания приложения "Hello World", используя clang и сисфункцию вывода для [[https://github.com/0Nera/SynapseOS SynapseOS]].
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Тестирование хелловорлда под 17 платформ одним скриптом |
Автор: Урри
[комментарии]
|
| В заметке рассказано как собрать и, главное, запустить и протестировать свой хелловорлд сразу под 17 платформ (29 вариантов сборки, так как почти каждая платформа идёт в двух вариантах: libc и musl) не создавая зоопарк виртуалок. Все желаемое осуществляется с помощью сборочного инструментарий void-linux, за что им огромное спасибо - работа проделана огромная.
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Sonatype Nexus как Maven proxy (доп. ссылка 1) |
Автор: ACCA
[комментарии]
|
| При попытке установить, например,
com.google.protobuf:protoc:exe:linux-x86_64:2.6.1, получаете ошибку:
Return code is: 400, ReasonPhrase: Detected content type [application/x-executable], but expected [application/x-dosexec]: com/google/protobuf/protoc/2.6.1/protoc-2.6.1-linux-x86_64.exe
В настройке репозитория maven2(proxy) есть незаметная галочка "Validate that
all content uploaded to this repository is of a MIME type appropriate for the
repository format".
Её выключение решает проблему, так как Nexus и Maven Central по-разному назначают MIME type.
|
|
|
|
|
Запись бинарных данных в секцию ELF |
Автор: 赤熊
[комментарии]
|
| Стоит задача - в программе запрятать бинарные данные. Допустим архив.
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Оценка стоимости сборки Android 5 (x86-64) на облачных серверах Amazon EC2 (доп. ссылка 1) |
Автор: Abylay Ospan
[комментарии]
|
| Краткая сводка по результатам тестирования:
сервер 4 CPU, 16GB RAM, время сборки: 04:35:30 стоимость: $1.15
сервер 16 CPU, 64GB RAM, время сборки: 01:12:02 стоимость: $1.21
сервер 40 CPU, 160GB RAM, время сборки: 00:32:15 стоимость: $1.34
По результам видно, что разница в цене всего 15%, но при этом время сборки
уменьшается в 8-9 раз. Сборка проводилась в разное количество потоков (make -j X).
Лучший результат показал вариант 'количество CPU * 2'. Исходные тексты Android
были взяты из репозитория на http://www.android-x86.org/
Сборка проводилась командами:
. build/envsetup.sh && lunch android_x86_64-eng && make -j X
ОС: Ubuntu 14.04.2 LTS, kernel 3.13.0-48-generic x86_64 CPU: Intel(R) Xeon(R)
CPU E5-2676 v3 @ 2.40GHz HDD: SSD 160GB
|
|
|
|
|
Как собрать в новом GCC старую C++-программу, использующую iostream.h |
[комментарии]
|
| В блоках #include следует заменить iostream.h и fstream.h на iostream и fstream
(убрать ".h"). В начало файлов нужно добавить "using namespace std;", а при
сборке в Makefile указать флаг "-fpermissive".
|
|
|
|
|
Внедрение точек останова gdb в исходный код (доп. ссылка 1) |
Автор: glebiao
[комментарии]
|
| На github [[https://github.com/kmcallister/embedded-breakpoints опубликован]] способ внедрения в исходный код точек останова для gdb, не влияющий на нормальное выполнение программы в отсутствие отладчика. Способ основан на размещении адреса локальной переменной в секции (embed-breakpoints линкера).
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Создание модуля для iptables, изменяющего ID пакета (доп. ссылка 1) |
Автор: xlise
[комментарии]
|
| Данная статья основывается на материале "Разработка Match-модуля для iptables своими руками" (http://www.linuxjournal.com/article/7184), но код работает на ядрах 2.6.20+.
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Как в программе на Си узнать от какого пользователя запущен активный экран |
Автор: pavlinux
[комментарии]
|
| #include
#include
#include // strcmp
#include
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Как указать GCC выводить предупреждения для бессмысленных сравнений (доп. ссылка 1) |
Автор: Kir Kolyshkin
[комментарии]
|
| При сборке ниже представленного некорректного кода, gcc не выдает никаких предупреждений даже с -Wall, при этом указатель он приводит к unsigned, поэтому результат сравнения всегда ложен.
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Изменение номера inode файла в Linux |
Автор: Victor Leschuk
[комментарии]
|
| Для некоторых специфических целей может понадобиться изменить номер inode у существующего файла,
либо создать файл с заранее заданным номером. Штатными средствами сделать это - задача нетривиальная,
однако с помощью модуля ядра это несложно.
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Как отлаживать сетевые скрипты с помощью netcat (доп. ссылка 1) |
Автор: Вячеслав
[комментарии]
|
| mkdir tmp
cd tmp
mkfifo sock1 sock2
nc -l -p 8000 < sock1 | tee sock2 &
nc 10.245.134.32 23 < sock2 | tee sock1
Теперь вместо того, чтобы устанавливать соединение непосредственно с узлом 10.245.134.32:23,
делаем telnet на localhost:8000 из другой консоли на хосте home и наблюдаем
проходящие данные внутри
tcp-сессии в консоли, где выполняли команды.
Для этой же цели подходит и утилита socat:
socat -v tcp4-l:8000 tcp4:yandex.ru:80
|
|
|
|
|
Отладка php скриптов на стороне сервера |
Автор: Pavel Piatruk
[комментарии]
|
| Иногда пользовательские скрипты или зависают, или хотят соединиться с чем-то запрещенным в файрволе,
или интерпретатор неожиданно вылетает, не передав заголовок Content-type, что приводит к ошибке 500.
Для того, чтобы разобраться в причине, попробуем отладить скрипты со стороны сервера,
не залезая в код php. Сначала придется изменить конфигурацию apache, чтобы php работало через suphp,
а не через модуль mod_php5. Я не буду рассказывать, как это делается. Главное, кроме обычного,
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Ускорение компиляции в Gentoo (доп. ссылка 1) |
Автор: wildarcher7
[комментарии]
|
| В наличии два ПК, на которых установлен Gentoo Linux с одинаковой версией gcc (4.3.1).
Так как компиляция из исходников в Gentoo необходима и компиляция отнимает некоторое время,
хотелось бы сократить время сборки. На помощь приходит distcc и ccache.
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
VMWare Workstation 6 для отладки ядра Linux (доп. ссылка 1) |
Автор: Тарасенко Николай
[комментарии]
|
| Недавно была добавлена интересная особенность в Workstation 6.0, которая делает WS6 отличным средством
для отладки ядра Linux. Теперь можно с легкостью отлаживать Linux VM на хосте при помощи gdb
без каких-либо изменений в Guest VM. Ни каких kdb, перекомпиляций или еще одной машины не требуется.
Все что вам потребуется, так это всего одна строчка в VM'шном конфигурационном файле.
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Как посмотреть причину генерации core файла в gdb (доп. ссылка 1) |
[комментарии]
|
| программа - файл рухнувшей программы, собранной с включением отладочной информации
core - файл с core
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Как избавиться от линковки GNOME приложения с лишними библиотеками (доп. ссылка 1) |
[комментарии]
|
| Собираем по умолчанию:
readelf -d /usr/local/bin/gnome-terminal |grep NEEDED | wc -l
52 - требуется 52 библиотеки.
Устанавливаем флаг --as-needed:
export CFLAGS = "-Os -s -Wl,--as-needed"
После пересборки, требуется 21 реально необходимая для работы библиотека.
|
|
|
|
|
|
Как посмотреть какие файлы пытается открыть или выполнить программа |
[комментарии]
|
| strace -f -o strace.txt -e execve программа
strace -f -o strace.txt -e open,ioctl программа
|
|
|
|
|
Как посмотреть какие функции системных библиотек используются в программе |
[комментарии]
|
| nm "объектный или запускной файл"
Для работы nm нужна таблица символов, т.е. нельзя использовать после утилиты
strip или ключа "-s" в gcc.
|
|
|
|
|
Как пропатчить приложение запускаемое через inetd для определения IP клиента. |
Автор: uldus
[обсудить]
|
| Си:
struct sockaddr_in addr_name;
socklen_t addr_len;
addr_len = sizeof(addr_name);
bzero(&addr_name, sizeof(addr_name));
if (getpeername(0, (struct sockaddr *)&addr_name, &addr_len) >= 0){
// выводим адрес в printf через inet_ntoa(addr_name.sin_addr)
}
Perl:
use Socket;
my $std_sockaddr = getpeername(STDIN);
my $cur_ipaddr = "0.0.0.0";
if (defined $std_sockaddr){
my ($tmp_port, $tmp_iaddr) = sockaddr_in($std_sockaddr);
$cur_ipaddr = inet_ntoa($tmp_iaddr);
}
|
|
|
|
|
Какие параметры указать GCC для оптимизации. (доп. ссылка 1) |
[комментарии]
|
| -O6 - полная оптимизация (по умолчанию часто стоит -O2).
-fomit-frame-pointer -использовать стек для доступа к переменным.
-march=i686 -mcpu=i686 -DARCH=k6 -DCPU=k6 - оптимизация под CPU (586, 686,k5,k6,k7,athlon,pentiumpro).
-ffast-math -funroll-loops
|
|
|
|
|
|
Сборка хелловорлда под 17 платформ одним скриптом |
Автор: Урри
[комментарии]
|
| Понадобилось настроить и запустить на сторонней машине автоматизированную сборку (и автотесты) своего кода сразу под ARM, MIPS, x86 и PowerPC - решил заодно поделиться с местным сообществом.
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Компиляция приложений с поддержкой OpenCL без закрытых драйверов |
Автор: Аноним
[комментарии]
|
| При сборке Wine не для личного использования, а чтобы распространять сборки, я
столкнулся с проблемой. С какой реализацией OpenCL линковать? NVIDIA, AMD,
Intel, Mesa? Ответ - FreeOCL!
На самом деле, не важно с чем линковать. У всех известных мне реализаций
OpenCL, сама библиотека libOpenCL.so.1 занимает около 30 Кб.
Оказывается, внутри этой библиотеки ничего нет. Сам OpenCL находится в другой
библиотеке (например в libatiocl64.so - см.
/etc/OpenCL/vendors/*.icd для подробностей). Однако залить
проприетарный драйвер в OBS-репозиторий я не могу, так как закрытый код.
Остаётся только Mesa и FreeOCL.
FreeOCL это программная реализация OpenCL, написанная на C++, и имеющая у
себя в зависимостях libatomic_ops - а LLVM не имеющая. Установив в систему
FreeOCL и opencl-headers, я успешно собрал Wine. Причём
Wine линкуется только с OPENCL_1.0, что не помешало конечному софту,
запущенному в Wine, успешно задействовать расширения 1.2 и 2.0.
В общем, рекомендую всем, кто до сих пор собирает с AMD APP SDK 3.0, перейти на
FreeOCL. Я попробовал скомпилировать весь известный мне OpenCL-софт при помощи
FreeOCL, а затем запустить на NVIDIA и AMD - всё работает безупречно. Не
падает, не отказывается стартовать, и демонстрирует ровно ту же скорость работы.
P.S. Бинарник получает зависимость от libOpenCL.so.1 (параметр
-lOpenCL), а пакет RPM или DEB также получает от pkg-config ещё
несколько зависимостей:
libOpenCL.so.1(OPENCL_1.0)(64bit)
libOpenCL.so.1(OPENCL_1.1)(64bit)
libOpenCL.so.1(OPENCL_1.2)(64bit)
libOpenCL.so.1(OPENCL_2.0)(64bit)
Поэтому если вы собираете пакеты, а не просто tar.gz архив с программой,
рекомендую пропатчить FreeOCL патчем
freeocl-0.3.6-disable-symbol-versioning.patch. В этом случае, пакет получит
зависимость только от libOpenCL.so.1()(64bit). Например в моей
системе в пакете NVIDIA 340.xx нет "версионинга" OpenCL, а в 390.xx
он есть. Вследствие чего, пакет не хотел устанавливаться, но после force
install - работал.
|
|
|
|