

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
Похоже что и пытаться не стоит, нужно просто смириться с семью динамически линкуемыми библиотеками и жить с этим дальше.

Oleg
22.03.2018
23:13:09
сам же написал

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

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
Я думаю что они есть там, в этих 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
там в любом случае есть эти либы

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 систем, то есть и поставляет минимальный набор библиотек.

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. старые ошибки в старых библиотеках (особо актуально для библиотек связанных с безопасностью)

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

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

Pavel
22.03.2018
23:45:15

Admin
ERROR: S client not available

Oleg
22.03.2018
23:45:46
думаю если упереться по крепче то теоретически можно и статический бинарник собрать

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

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};

Valeriy
23.03.2018
06:48:00

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

Denis
23.03.2018
06:53:34

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

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

Denis
23.03.2018
07:32:51
+1

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