powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Автоматическое удаление неиспользуемой части кода
7 сообщений из 7, страница 1 из 1
Автоматическое удаление неиспользуемой части кода
    #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
Автоматическое удаление неиспользуемой части кода
    #39089172
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Degun,

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

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

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

Хорошо, а почему её нет в файле FileSrc2.obj ?
...
Рейтинг: 0 / 0
Автоматическое удаление неиспользуемой части кода
    #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
Автоматическое удаление неиспользуемой части кода
    #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
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Автоматическое удаление неиспользуемой части кода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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