g ++ связывание зависимости порядка при связывании кода c с кодом c ++

макет buildtools в 23.0.0.rc2 был возвращен

, поэтому, чтобы иметь возможность его использовать, вам необходимо обновить плагин до 1.3.0-beta2 или выше, как показано ниже:

enter image description here [/g0]

30
задан Gearoid Murphy 5 October 2013 в 16:06
поделиться

3 ответа

Порядок, в котором вы указываете объектные файлы и библиотеки, ОЧЕНЬ важен в GCC - если вас это не укусило до того, как вы прожили очаровательную жизнь. Компоновщик ищет символы в том порядке, в котором они появляются, поэтому, если у вас есть исходный файл, содержащий вызов библиотечной функции, вам нужно поместить его перед библиотекой, иначе компоновщик не узнает, что он должен разрешить его. Сложное использование библиотек может означать, что вам придется указывать библиотеку более одного раза, что является королевской болью, чтобы добиться правильного.

43
ответ дан 27 November 2019 в 18:03
поделиться

Порядок передачи библиотек в gcc/g++ действительно имеет значение. Если A зависит от B, то A должна быть указана первой. Причина в том, что он оптимизирует символы, на которые нет ссылок, поэтому если он первым увидит библиотеку B, а на нее в этот момент никто не ссылался, то он вообще не будет ничего из нее линковать.

20
ответ дан 27 November 2019 в 18:03
поделиться

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

Таким образом, порядок ссылок очень важен; если вы собираетесь использовать статические библиотеки, вам нужно следить за зависимостями и не вводить циклические зависимости между библиотеками.

6
ответ дан 27 November 2019 в 18:03
поделиться