У меня есть минимальный cpp файл с содержимым,
int main() {}
Затем я компилирую и связываю, используя
$ g++ -c main.cpp
$ g++ -o main main.o -Wl,-u,foo
Ожидаемое поведение: Поскольку компоновщик не может найти символ foo, потому что он нигде не определен, я ожидал, что компоновщик выдаст ошибку о том, что символ foo
не найден / не разрешен.
Фактическое поведение: шаг ссылки выполнен успешно.
Может ли кто-нибудь помочь мне понять это поведение и как я могу заставить компоновщик выдавать ошибку, когда он не может найти неопределенный символ, возможно, используя какой-либо флаг компоновщика?
$ g++ --version
g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-23)
Заранее спасибо !!!
РЕДАКТИРОВАТЬ: Вероятно, это связано с моим недопониманием относительно неопределенных символов, поэтому позвольте мне уточнить мое понимание компоновщика. Компоновщик ищет неопределенные символы в списке последовательно через -llib...
и foo
, в данном случае это один из таких неопределенных символов. Я ожидал, что в конце обхода всего списка библиотек не должно быть никаких неопределенных символов, т.е. все символы должны быть определены. Я ошибаюсь, думая об этом?