Выполнение команды терминала без наложения [дубликат]

Поскольку люди, похоже, обращаются к этому вопросу, когда речь заходит об ошибках компоновщика, я собираюсь добавить это здесь.

Одной из возможных причин ошибок компоновщика с GCC 5.2.0 является то, что новая библиотека libstdc ++ ABI теперь выбран по умолчанию.

Если вы получаете ошибки компоновщика о неопределенных ссылках на символы, которые включают типы в пространстве имен std :: __ cxx11 или теге [abi: cxx11], то это, вероятно, указывает на то, что вы пытаетесь связать файлы объектов, которые были скомпилированы с различными значениями для макроса _GLIBCXX_USE_CXX11_ABI. Это обычно происходит при подключении к сторонней библиотеке, которая была скомпилирована с более старой версией GCC. Если сторонняя библиотека не может быть перестроена с новым ABI, вам нужно будет перекомпилировать свой код со старым ABI.

. Если вы вдруг получите ошибки компоновщика при переключении на GCC после 5.1.0 это было бы замечательно.

4
задан SSC 20 November 2013 в 05:20
поделиться

1 ответ

Вы не можете этого сделать. Linux создает новый процесс путем последовательного вызова fork() и exec(). Никакой другой способ создания процесса не существует.

Но сам fork() довольно эффективен. Он использует Copy-on-Write для дочернего процесса, поэтому fork() не копирует память, пока она не понадобится. Итак, если вы назовете exec() сразу после fork(), ваша система не будет потреблять слишком много памяти.

UPD. Я вам говорю, говоря о создании процесса. На самом деле существует clone() вызов, который fork() использует внутренне. Этот вызов обеспечивает больший контроль над процессом создания, но его может быть сложно использовать. Подробнее читайте в man 2 fork и man 2 clone.

8
ответ дан JIghtuse 27 August 2018 в 14:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: