Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Автоматическое удаление неиспользуемой части кода / 7 сообщений из 7, страница 1 из 1
28.10.2015, 17:48
    #39089170
Degun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое удаление неиспользуемой части кода
Проект на C++ в Visual Studio 2013
Есть два файла с кодом - FileSrc1.cpp и FileSrc2.cpp и один общий заголовочный файл - Core.hpp
В FileSrc2.cpp есть функция checkRange, которая объявлена в Core.hpp и вызывается из кода в FileSrc1.cpp. Проект компилируется нормально, но при линковке пишется, что
Код: plaintext
1.
 Error	172	error LNK2019: unresolved external symbol "bool __cdecl checkRange ... 

Смотрю в файле FileSrc2.obj - там этой функции нет.
Помню где-то в опциях проекта видел настройку, чтобы удалять код, на который нет ссылок. Похоже она установлена и поэтому компилятор посчитал, что на функцию checkRange нет ссылок, и вырезал её. Какая настройка проекта влияет на такое поведение?
...
Рейтинг: 0 / 0
28.10.2015, 17:51
    #39089172
RWolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое удаление неиспользуемой части кода
Degun,

функция не static?
...
Рейтинг: 0 / 0
28.10.2015, 17:52
    #39089173
Degun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое удаление неиспользуемой части кода
RWolf,

Нет
...
Рейтинг: 0 / 0
28.10.2015, 17:55
    #39089175
RWolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое удаление неиспользуемой части кода
Degun,

значит, объявление функции не соответствует её определению в заголовке.
...
Рейтинг: 0 / 0
28.10.2015, 17:56
    #39089176
Degun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое удаление неиспользуемой части кода
RWolf,

Хорошо, а почему её нет в файле FileSrc2.obj ?
...
Рейтинг: 0 / 0
29.10.2015, 10:20
    #39089614
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое удаление неиспользуемой части кода
DegunПроект на C++ в Visual Studio 2013
Есть два файла с кодом - FileSrc1.cpp и FileSrc2.cpp и один общий заголовочный файл - Core.hpp
В FileSrc2.cpp есть функция checkRange, которая объявлена в Core.hpp и вызывается из кода в FileSrc1.cpp. Проект компилируется нормально, но при линковке пишется, что
Код: plaintext
1.
 Error	172	error LNK2019: unresolved external symbol "bool __cdecl checkRange ... 

Смотрю в файле FileSrc2.obj - там этой функции нет.
Помню где-то в опциях проекта видел настройку, чтобы удалять код, на который нет ссылок. Похоже она установлена и поэтому компилятор посчитал, что на функцию checkRange нет ссылок, и вырезал её. Какая настройка проекта влияет на такое поведение?

Твои предположения ошибочны.

Наличие ошибки LNK2019 уже говорит о том, что где-то на эту функцию есть ссылка.

Какие настройки влияют на "это" -- в первую очередь, уровень оптимизации кода. В debug-режиме никакого "выреза" не будет.
Дебаг режим -- с отключённой оптимизацией, ключ уже не помню наизусть.


Твоя же проблема, думаю, связана с соглашениями о вызовах, тут в функции требуется __cdecl, а у тебя возможно она объявлена
как __stdcall.
...
Рейтинг: 0 / 0
29.10.2015, 10:36
    #39089654
Degun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое удаление неиспользуемой части кода
Разобрался в чём было дело. Предыдущее описание ситуации - это сильно упрощённое описание реального проекта, в котором в разных папках находились два файла с одинаковыми именами mathfuncs.cpp. Разные части проекта ссылались на функции, находящиеся в обоих этих файлах. Когда я добавлял в проект только первый файл mathfuncs.cpp, в котором находилась функция checkRange, то проект не собирался, т. к. проекту ещё требовались функции, которые находились во втором файле mathfuncs.cpp, находящемся в другой папке. Когда я добавлял в проект второй файл mathfuncs.cpp, то при компиляции в папке Release компилятор сначала компилировал первый файл mathfuncs.cpp, создав mathfuncs.obj, а затем компилировал второй файл mathfuncs.cpp, молча затирая mathfuncs.obj от первого файла mathfuncs.cpp, где находилась функция checkRange. Проект естественно не собирался, т. к. функционал от первого файла mathfuncs.cpp был потерян.
Вышел из положения переименовав второй файл mathfuncs.cpp.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Автоматическое удаление неиспользуемой части кода / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]