@dlangru

Страница 475 из 719
Pavel
22.03.2018
22:48:22
Похоже в этом расследовании можно п оставить точку. Наконец то я нашел что не мог нагуглить. Оказывается гуглил просто не по тем словам.

https://forum.dlang.org/post/p0dmad$lbf$1@digitalmars.com

Если кратко: 1) DMD не умеет делать единые бинарники без динамической линковки 2) LDC умеет делать статический бинарник без зависимых либ вообще, надо компилять с флагом -static 3) Некоторые вещи вроде резолвинга DNS каким-то образом делают статическую линковку невозможной из-за libnss или чего-то там еще. 4) Создавать статические бинарники нехорошо, пнятненько https://www.akkadia.org/drepper/no_static_linking.html 5) В go куча своих велосипедов, включая собственную реализацию SSL и вызовов сисколлов в обход libc, поэтому то там так круто и легко делаются единые статические бинарники

6) Статический hello-world на go весит 2.2Мб, статический hello-world на D в режиме betterC весит 814Кб. А вот собрать статически с нормальным рантаймом у меня не получилось, ругается на libphobos.

Google
Pavel
22.03.2018
22:59:38
Похоже что и пытаться не стоит, нужно просто смириться с семью динамически линкуемыми библиотеками и жить с этим дальше.

Pavel
22.03.2018
23:13:39
betterC он действительно сделал, а вот нормальный режим не может чето

Oleg
22.03.2018
23:13:49
хз, у меня всё может

1 мин

Pavel
22.03.2018
23:14:17
warning: Using 'getpwnam_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

Вот такие ошибки валятся

Oleg
22.03.2018
23:15:08
ну всмысле всё что с D связанно он может засунуть в бинарник

я так под rpi собираю

на целевой системе нет libphobos и libdruntime

кстати и dmd под win тоже так умеет

на целевой системе только gtkd

Google
Oleg
22.03.2018
23:16:21
либо ты что-то делаешь не так, либо я тебя не понял

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

и никаких static флагов

Pavel
22.03.2018
23:19:37
покажи мне такой статически собранный бинарник :)

Oleg
22.03.2018
23:21:48
всмысле?

конкретно про тот проект это комерческая тайна))) но я могу собрать другой)

пару минут

Pavel
22.03.2018
23:22:21
Да собери просто hello world

Oleg
22.03.2018
23:28:12
Да собери просто hello world
вроде так будет

Pavel
22.03.2018
23:30:41
неа =\

$ ldd hello linux-vdso.so.1 => (0x00007ffd9e4f5000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f8261938000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8261734000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8261516000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8261210000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f8260ffa000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8260c31000) /lib64/ld-linux-x86-64.so.2 (0x00007f8261b40000)

Вот вся эта орава библиотек которые динамически подгружает бинарник

Oleg
22.03.2018
23:31:21
ну так фобоса то с рантаймом нет же?

Pavel
22.03.2018
23:31:21
на целевой системе нет libphobos и libdruntime
Ну а то что эти штуки вкомплируются - это да, нет проблем.

Я думаю что они есть там, в этих 800кб

Oleg
22.03.2018
23:32:17
думаю только то что нужно

Pavel
22.03.2018
23:32:24
Ну да

Oleg
22.03.2018
23:32:44
du -h lib/* 5.4M lib/libdruntime-ldc-debug.a 2.9M lib/libdruntime-ldc.a 20M lib/libphobos2-ldc-debug.a 11M lib/libphobos2-ldc.a

Pavel
22.03.2018
23:32:51
Только это не статический бинарник, это динамический бинарник со статически подключенными libphobos и libdruntime

Oleg
22.03.2018
23:33:09
а на кой тебе статический бинарник?

Google
Pavel
22.03.2018
23:33:23
Это конечно лучше чем если бы они динамически подключались и их надо было бы таскать везде, но все еще от кучи линуксовых либ зависит

Oleg
22.03.2018
23:33:36
и?

в любом случае ты это запускаешь на какой-то системе

Pavel
22.03.2018
23:33:54
А вот и нет ;)

Oleg
22.03.2018
23:33:55
там в любом случае есть эти либы

А вот и нет ;)
ну тогда тебе к тов Eugene

Pavel
22.03.2018
23:34:31
потому что я хочу сделать минимальный docker контейнер, коим является образ scratch. Он вообще пустой без единой либы.

Oleg
22.03.2018
23:34:33
он на чистом железе поднимал со своим рантаймом

и Денис тоже поднимал

на cortex кажется

Pavel
22.03.2018
23:35:40
Ближайший минимальный образ это busybox, он он весит уже 4.4мб, поставляется с шеллом на борту, парой десятков библиотек и сотней базовых линуксовых команд.

Oleg
22.03.2018
23:35:43
ну во первых тебе все библиотеки нужны в статическом виде

Pavel
22.03.2018
23:36:11
Я думаю это как раз то что делали они. busybox используется для embedded систем, то есть и поставляет минимальный набор библиотек.

ну во первых тебе все библиотеки нужны в статическом виде
Ну вот магия go такова что он делает абсолютно независимый статический бинарник. Который походу напрямую с ядром общается.

Oleg
22.03.2018
23:37:15
так это ясно

иначе бы как у них можно было бы кросс делать с одной системы на другую, имея только компилятор go?

без либ на целевую платформу

Pavel
22.03.2018
23:38:12
Не знаю, я там не копал. Но походу факт в том что в D так принципиально невозможно

Oleg
22.03.2018
23:38:27
я думаю что это и не нужно

Google
Oleg
22.03.2018
23:38:45
для контейнеров, возможно удобно

для делания контейнеров

но ты ведь можешь сделать контейнер с минимальным набором библиотек и забыть об этом

на настоящей системе такой подход просто зло

1. увеличение занимаемого дискового пространства 2. увеличение расхода оперативы 3. старые ошибки в старых библиотеках (особо актуально для библиотек связанных с безопасностью)

Не знаю, я там не копал. Но походу факт в том что в D так принципиально невозможно
кстати, я кроме go, даже не припоминаю больше языков таких

Pavel
22.03.2018
23:43:48
я думаю что это и не нужно
Да, раз все оказывается так сложно и запутано, то не стоит заморачиваться. Я не знал что гошники донаркоманились до того что сами реимплементировали функции из libc и libssl

Oleg
22.03.2018
23:45:04
зачастую сложность возникает не из-за обстоятельств, а от мышления, которое не привыкло действовать в этих обстоятельствах

Pavel
22.03.2018
23:45:15
1. увеличение занимаемого дискового пространства 2. увеличение расхода оперативы 3. старые ошибки в старых библиотеках (особо актуально для библиотек связанных с безопасностью)
Это да, но тут специально еще идет заточка на контейнеры, которые легко и быстро меняются при каждом деплое. Они прям попали в струю) В общем я собрал себе минимальный образ с библиотеками который весит 11Мб, с этим я готов смириться. Зато в контейнере даже полноценный /bin/sh и куча утилит есть )

Admin
ERROR: S client not available

Pavel
22.03.2018
23:49:52
Ну такой ценой уже как-то смысл пропадает. Я хотел просто не копировать 7 библиотек а чтобы все в одном собиралось. Ну да и пофиг.

Oleg
22.03.2018
23:50:22
в целом то да

на результате, думаю, не особо отражается

кто-нибудь пользовал std.experimental.allocator.building_blocks.region?

Stanislav
23.03.2018
03:50:39
https://habrahabr.ru/company/yandex/blog/351492/ что-то с++ с каждой итерацией все ужасней и ужасней

Evgeny
23.03.2018
04:39:01
он все больше и больше становится похожим на D

Stanislav
23.03.2018
04:40:25
по фишкам да, а синтаксис ужасный. особенном с датами намудрили?

Google
Evgeny
23.03.2018
04:40:52
литералы дат - не нужны

Stanislav
23.03.2018
05:03:30
а кто-нибудь betterC уже использовал? смущает пометка что встроенные треды не поддерживаются.

Valeriy
23.03.2018
06:38:09
https://habrahabr.ru/company/yandex/blog/351492/ что-то с++ с каждой итерацией все ужасней и ужасней
А чего ужасного в нём? Он просто другой, но на по своему прекрасен.

Stanislav
23.03.2018
06:46:40
возможно это с моей колокольни c/java/d, но мне кажется что он менее читаемый становится. возможно для тех, кто постоянно пишет на плюсах - всё ок, тут не спорю :) Смотрите как красиво и легко теперь можно задавать даты в C++20: using std::chrono; year_month_day ymd = 2016y/May/29d; // 2016-05-29 zoned_time zt = {"Asia/Tokyo", tp};

Stanislav
23.03.2018
06:53:25
ладно, нужно меньше хейта :)

Dmitry
23.03.2018
07:15:21
Главная проблема С++ это то что старые фичи никуда не деваются. Ди этим тоже грешит, но в С++ это наиболее сильно чувствуется. В итоге все пишут на языке в меру своего понимания, что делает порог вхождения крайне высоким

Denis
23.03.2018
07:15:52
С++ всё более и более нинужен

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

Dmitry
23.03.2018
07:16:24
На счет чистого Си плюсую. Его реально знать надо.

@ahdenchik кстати, а твой pgtor только через LDC можно собрать?

Maxim
23.03.2018
07:21:48
когда из языка куда-то девается старая фича, он превращается в новый язык)

Denis
23.03.2018
07:22:18
@ahdenchik кстати, а твой pgtor только через LDC можно собрать?
Нет, и через dmd тоже. Про gdc не знаю, наверно не пробовал

Dmitry
23.03.2018
07:25:06
Я просто попробовал собрать вчера под Дебиан и он выругался "/usr/bin/ld: cannot find -lpq"

Putch
23.03.2018
07:26:02
это вроде либа postgressql-dev

установи

Dmitry
23.03.2018
07:26:45
А хорошо, только уже не сейчас. Потом как будет время. Денис, плиз укажи про это в readme

Денис
23.03.2018
07:29:56
https://habrahabr.ru/company/yandex/blog/351492/ что-то с++ с каждой итерацией все ужасней и ужасней
Даты? Серьезно ? Еще немного синтаксиса в с++, чтобы даты были проще? Как же господи прекрасно, что я на этом гомункуле от этих бесноватых исследователей языков больше не пишу.

Dmitry
23.03.2018
07:34:00
Ну просто я склонировал репу и не смог собрать

Страница 475 из 719