Внутри кода, в котором вы создаете строку, обратная косая черта сначала является символом escape-кода javascript, что означает, что escape-последовательности, такие как \t
, \n
, \"
и т. д., будут переведены в их javascript-аналог (вкладка, новая строка, цитата и т. д.), и это будет сделано частью строки. Double-backslash представляет собой одиночную обратную косую черту в самой собственно строке, поэтому, если вам нужна обратная косая черта в строке, вы сначала избегаете ее.
Итак, когда вы создаете строку, говоря var someString = '(\\s|^)'
re действительно делает создание фактической строки со значением (\s|^)
.
Как я понимаю, системные библиотеки, такие как libc, также должны поставляться, потому что исполняемый файл будет аварийно завершаться при другой версии libc.
blockquote>Это неверно : GLIBC гарантирует обратную совместимость (исполняемый файл, построенный на более старой системе, будет продолжать работать на более новых версиях GLIBC).
Единственный разумный способ добиться того, чего вы хотите - это скомпилировать самую старую версию GLIBC, которую вы хотите поддерживать.
Между тем libc, похоже, связан с ld-linux
blockquote>Правильно:
libc.so.6
иld-linux
являются частью GLIBC, должны происходить из такая же сборка, и любое несоответствие может привести к катастрофическому отказу (SIGSEGV
внутриlibc.so.6
или внутриld-linux
).Мне тоже нужно упаковать ld-linux.
blockquote>Это сложно: абсолютный путь к
ld-linux
жестко запрограммирован вa.out
и не может быть изменен. Сделать перемещаемымa.out
, который может допускать изменения в пути кld-linux
, невозможно (если не считать явного вызова загрузчика, который вы уже пробовали; который не работает хорошо для исполняемых файлов, которые повторно исполняются сами) ).Обновление:
Я мог бы попытаться использовать старую Ubuntu LTS и получить большую часть обратной совместимости, но тогда я не получил бы новые компиляторы C ++ 17, который в основном побеждает весь смысл современной разработки программного обеспечения.
blockquote>Вы можете установить более новый компилятор на более старой системе и получить C ++ 17 с более старой GLIBC.
Одна трудность в том, что вам может потребоваться более новый
libstdc++.so.6
.Хорошая новость заключается в том, что
-Wl,-rpath=$ORIGIN
работает нормально - только GLIBC трудно переместить. Вы также можете связать исполняемый файл сlibstdc++.a
с--static-libstdc++
.Тем не менее, в этом могут быть и последствия для лицензирования (но опять же ваш план уже включал распространение всех библиотек, так что проблема не нова).