Линкерная оптимизация - PullRequest
1 голос
/ 25 октября 2011

Мой компоновщик (link.exe из Microsoft Visual C ++ 2005), вероятно, пытается оптимизировать свою работу и не статически связывает все объекты, содержащиеся в файле *.lib, с конечным исполняемым файлом, что мне необходимо из-за следующих задач профилирования,Как заставить link.exe включить все символы (которые даже не указаны в исходном коде) в конечный исполняемый файл?

Итак, проблема в том, что у меня есть библиотечный файл mylib.lib, который содержитfoo.obj, bar.obj и qux.obj.

Мои файлы исходных кодов ссылаются на символы из foo.obj.

Когда я статически связываю исходный код с библиотечным файлом mylib.lib, он связываеттолько к foo.obj никакие другие символы не присоединяются к конечному исполняемому файлу, тогда как они мне нужны там (чтобы они загружались в память вместе с процессом).

Я пробовал много решений, но безуспешно.Это оптимизация?Я не хочу этого.

1 Ответ

1 голос
/ 26 октября 2011

В некоторой степени именно так работают линкеры - они выбирают те объектные модули, которые содержат символы, на которые ссылается библиотека или исполняемый файл, которые он должен создавать, и игнорируют остальные. На самом деле это не оптимизация, а то, как они должны работать.

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

...