- Remove From My Forums
-
Question
-
Hi Everyone,
I had an application created in VS 2003 which builds without any errors. Now I opened it in VS 2005 and tried to build, it gives the following linker error…
1>CVTRES : fatal error CVT1100: duplicate resource. type:MANIFEST, name:1, language:0x0409
1>LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
I am using wx widgets — 2.6
I have a .rc file which includes the line
1 RT_MANIFEST «wx/msw/wx.manifest».
If I try to change the Id in the above line as
2(any other no) RT_MANIFEST «wx/msw/wx.manifest» or try to comment out this line, I get huge no. of linker errors related to wx. Few of them are as below…
1>TmpFileForCmdLine.obj : error LNK2001: unresolved external symbol «wchar_t const * const wxEmptyString» (?wxEmptyString@@3PB_WB)
1>EFModuleSplashScreen.obj : error LNK2001: unresolved external symbol «wchar_t const * const wxEmptyString» (?wxEmptyString@@3PB_WB)
1>EFVersionInfo.obj : error LNK2019: unresolved external symbol «wchar_t const * const wxEmptyString» (?wxEmptyString@@3PB_WB) referenced in function «public: __thiscall CVersionInfo::CVersionInfo(class wxString &)» (??0CVersionInfo@@QAE@AAVwxString@@@Z)
1>Helper.obj : error LNK2001: unresolved external symbol «wchar_t const * const wxEmptyString» (?wxEmptyString@@3PB_WB)
1>ProfilerConfig.obj : error LNK2001: unresolved external symbol «wchar_t const * const wxEmptyString» (?wxEmptyString@@3PB_WB).
I want to compile and link my application without this error.
Thanx for any help….
Answers
-
Hey,
Its Done!!!!!!!!!!For the manifest linker error, your solution worked fine…….. i.e., Removing
1 RT_MANIFEST «wx/msw/wx.manifest» from .rc file and putting it under Manifest Tool -> Input and Output -> Additional Manifest Files….
For my linker errors, I was linking with the wx libraries that were built on VC7. Now I built wx libraries on VC8 and linked and it worked fine….
Thanks alot
-
Marked as answer by
Monday, September 1, 2008 7:44 AM
-
Marked as answer by
Я пытаюсь скомпилировать свой проект, который имеет два файла ресурсов. Первый файл содержит диалог, меню и т. Д., Кроме таблицы строк, второй — только таблицы строк. Итак, каждый раз, когда я пытаюсь построить свой проект, я получаю следующую ошибку:
1>CVTRES : fatal error CVT1100: duplicate resource. type:STRING, name:969, language:0x0419
1>LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
Я попытался отключить инкрементные ссылки, переименовать строковые метки в таблице строк, полностью изменить идентификаторы строк, найти эту проблему в Google, найти этот идентификатор в моем решении, но ошибка остается неизменной, за исключением следующей части:
name:969
Пожалуйста, помогите мне, я действительно раздражен этой проблемой. Заранее спасибо!
1
Решение
У меня была похожая проблема с дублирующимися строками. Я попытался переместить строки с идентификаторами 9001 — 9019 из основного файла .rc во второй файл .rc, и у меня появилась эта ошибка от компоновщика:
2>CVTRES : fatal error CVT1100: duplicate resource. type:STRING, name:564, language:0x041B
2>LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
Я пытался найти строку с идентификатором 564, но не было. Таким образом, очевидно, что имя строки относится к чему-то, кроме идентификатора отдельной строки. Затем я попытался найти, какая из перемещенных строк упоминается в сообщении об ошибке, и кажется, что каждая строка, начиная с 9008, вызывает ошибку после ее перемещения.
Прочитав предыдущий ответ, что сообщение об ошибке относится к группе строк или таблице строк (ключевое слово STRINGTABLE в файле .rc), я понял, что, переместив часть строк в другой .rc, я фактически создал 2 таблицы строк с идентификатором 564 ,
Решение: изменение идентификаторов строк 9008-9019 на 9108-9119 (я также должен был проверить идентификаторы других строк, которые были в ресурсе после строки 9019) помогло устранить ошибку.
2
Другие решения
Была похожая проблема. Строки сгруппированы в наборы по 16 идентификаторов. 969 — это группа #, поэтому она будет относиться к группе из 16 строковых идентификаторов ресурсов, начиная с 969 * 16 = ID 15504. Если у вас есть несколько файлов ресурсов, найдите любые строковые ресурсы, которые пересекаются с номерами идентификаторов в диапазоне от 15504 до 15519.
Вы также можете попробовать очистить (удалить) скомпилированные файлы ресурсов, заканчивающиеся на .aps, если .rc или .h были отредактированы вручную.
Постскриптум язык 0x0419 относится к русскому. 0x0409 будет американский английский.
2
Я работаю над проектом среднего размера, который использует qmake для создания файлов проекта Visual Studio 2005. Я пытаюсь создать его под Visual Studio 2010 Ultimate. Поскольку qmake еще не поддерживает эту среду IDE, я использовал предоставленный помощник по преобразованию, чтобы преобразовать мое решение.
При попытке сборки я получаю следующую ошибку в одном из подпроектов:
CVTRES: фатальная ошибка CVT1100: дублированный ресурс. тип: ВЕРСИЯ, имя: 1, язык: 0x0407
После того, что мне сказали результаты Google, кажется, что эта ошибка может возникнуть при переходе на более новую версию Visual Studio, но я не знаю, почему, и рекомендуемые там хаки не работают для меня.
Что я уже пробовал, так это переименовывать ресурсы в случайные числа, даже в другое «имя» при каждом появлении информации о версии. Когда я снова создаю проект после прочтения ошибки и удаления соответствующего .RC-файла, он работает один раз. Но это слишком много взлома.
Любые идеи? Заранее спасибо.
14 ответы
Я решил эту проблему при переходе с VC++ 2010 на 2012, изменив параметр в разделе «Свойства конфигурации»> «Инструмент манифеста»> «Ввод и вывод»> «Встроить манифест» на НЕТ. Я понятия не имею, что это такое, но я просмотрел содержимое .manifest
файл, и похоже, что я могу жить без его встраивания.
ответ дан 22 авг.
Недавно я решил аналогичную проблему с Qt 4.8.2 и Visual Studio 2012. Qt 4.8.2 не поддерживает VS2012 как mkspec, поэтому я скопировал win32-msvc2010
mkspec для win32-msvc2012
(изменение _MSC_VER
до 1700) и использовал некоторые другие обходные пути (исправление QtWebKit и т. д. — вы можете найти их в Интернете) для сборки Qt 4.8.2 с VS2012. Но qmake не знал о VS2012. .vcxproj
файлы проекта, поэтому он продолжал генерировать проекты VS2010. После преобразования этих файлов проекта в новый формат 2012 года в VS возникла вышеуказанная ошибка.
решение было исключить сгенерированные .res
файлы из сборки во всех конфигурациях (как Debug, так и Release). Для этого откройте папку «Созданные файлы» в обозревателе решений, щелкните правой кнопкой мыши .res
файл, откройте «Свойства», выберите «Все конфигурации» из раскрывающегося списка и установите для свойства «Исключено из сборки» раздела «Общие» значение «Да».
Каждый раз повторять эти действия руками довольно утомительно, поэтому я написал скрипт на Python, чтобы автоматизировать это. Вы можете использовать его (на свой страх и риск!) для обновления сгенерированных qmake .vcxproj
файлы.
import sys import os from xml.etree import ElementTree def updateProject(имя файла): def getXmlns(tag): return tag[1:].split('}')[0] tree = ElementTree.parse(filename) root = tree. getroot() xmlns = getXmlns(root.tag) для cb в root.iter('{' + xmlns + '}CustomBuild'): if(не 'Включить' в cb.attrib): continue if(not cb.attrib[ 'Включить'].endswith('.res')): продолжить для excl в cb.iter('{' + xmlns + '}ExcludedFromBuild'): if('Условие' в excl.attrib): del excl.attrib[ 'Condition'] # удалить условие ExcludedFromBuild ElementTree.register_namespace('', xmlns) tree.write(filename) if(len(sys.argv)>=2): # использовать файлы проекта, указанные в командной строке: for i in range( 1, len(sys.argv)): updateProject(sys.argv[i]) else: # обновить все файлы проекта в текущем каталоге: for filename в os.listdir(os.getcwd()): if(filename.endswith( '.vcxproj')): updateProject(имя файла)
Благодаря Ксанди за указание, что вам нужно передать рабочий каталог в listdir()
чтобы скрипт работал в Python 2.
ответ дан 23 мая ’17, 13:05
Если вы столкнулись с этой ошибкой во время компиляции (обычно это проект, загруженный из Интернета), удалите файл манифеста и удалите ссылку на файл манифеста в файле .rc.
Справка
Создан 20 июн.
Недавно я столкнулся с этой проблемой и случайно оказался с файлом проекта, в котором не было конфликта ресурсов. В моем случае я импортировал сгенерированный проект QT qmake для VS2008 в VS2010. После использования VcprojFormatter и множества различий я нашел разницу (для себя). Я думаю, что это ошибка либо в мастере импорта, либо в ядре VS 2010.
http://www.codeproject.com/KB/macros/vcproj_formatter.aspx
Мой файл ресурсов назывался win32_resources.rc. Вам нужно будет отредактировать каждую папку промежуточных данных в соответствии с вашими конфигурациями сборки (выпуск, отладка и т. д.).
Найдите раздел, подобный следующему, в файле vcxproj:
<ItemGroup>
<Resource Include="debugwin32_resources.res">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</Resource>
<Resource Include="releasewin32_resources.res">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
</Resource>
</ItemGroup>
Весь текст «Ресурс» следует заменить на «CustomBuildStep»:
<ItemGroup>
<CustomBuildStep Include="debugwin32_resources.res">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</CustomBuildStep>
<CustomBuildStep Include="releasewin32_resources.res">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
</CustomBuildStep>
</ItemGroup>
Проблема в файле VS2008 заключается в том, что настройка по умолчанию (?) не была явной:
<File RelativePath="releasewin32_resources.res">
<FileConfiguration
Name="Debug|Win32"
ExcludedFromBuild="true"
>
<Tool Name="VCCustomBuildTool"/>
</FileConfiguration>
</File>
Поле «Имя инструмента» отсутствовало.
Создан 20 янв.
Если вы столкнулись с этой ошибкой во время компиляции (обычно это проект, загруженный из Интернета), удалите файл манифеста и удалите ссылку на файл манифеста в файле .rc.
Этот ответ hB0 был на 100% правильным для случая, с которым я столкнулся.
Это было очень полезно для меня, и я хотел бы, чтобы другие узнали об этом, а не предполагали, что ответ hB0 следует игнорировать, потому что у других есть голоса, а у hB0 нет голосов. Я должен сказать это в отдельном ответе, потому что система не позволит незарегистрированному пользователю проголосовать. Я даже зарегистрировался, чтобы иметь возможность голосовать за этот ответ, но система по-прежнему не позволяет мне голосовать, пока я не стану более зрелым пользователем.
Создан 09 сен.
Это натяжка, но у меня была аналогичная проблема в Visual Studio 2005. Это может помочь или совершенно не так:
Я связывался со статической библиотекой (.lib), у которой есть собственный ресурс версии — очень разумно, он показывает версию библиотеки. На некоторых станциях мое приложение будет ссылаться. На других станциях я бы получил такое же дублирующее сообщение о ресурсах, как и вы.
Оказалось, что это связано с настройкой оптимизации компоновщика: «Использовать входные данные зависимостей библиотеки» (UseLibraryDependencyInputs=), возможно, в сочетании с «Связать зависимости библиотеки». Когда «Использовать входные данные зависимостей библиотеки» было включено, компоновщику передавались файлы .obj и .res, которые использовались для сборки .lib, а не просто поиск в .lib.
Проблема в том, что ты не хочу .res файл .lib в качестве входного файла для компоновщика. У моего проекта есть собственный ресурс версии. Если вы введете ресурсы .lib, у вас теперь будет два ресурса версии, отсюда и ошибка. Если компоновщик просто ищет .lib, у него нет причин вводить ресурс .lib, и все в порядке.
Конфигурация моего проекта не заставляла параметр «Использовать входные данные зависимостей библиотеки», он унаследовал его. На некоторых станциях он унаследовал «Нет», и я мог связать. На некоторых станциях он унаследовал «Да», и мы получили ошибку.
Если в Visual Studio 2010 по-прежнему есть этот параметр, попробуйте принудительно отключить его.
ответ дан 04 авг.
У меня была эта проблема, и она была решена путем исключения из сборки всех включенных файлов .rc, кроме основного .rc, который был #включая остальные.
ответ дан 01 авг.
У меня была эта проблема, и она была решена путем исключения из сборки всех включенных файлов .rc, кроме основного .rc, который был #включая остальные. Ричард Хайн работал на меня. Я компилировал с VS2013.
Создан 10 ноя.
У меня была аналогичная проблема в Visual Studio C++ 2010. Я не устанавливал никаких пакетов обновлений или обновлений VS, и эта проблема возникает, когда у меня было два файла rc, которые пытались использовать ICONs. Поэтому я просто взял содержимое одного файла и вырезал его в основной файл. Таким образом, только один файл содержит ЗНАЧКИ, а второй файл пуст. Работает как шарм :-).
Создан 09 июля ’15, 20:07
Замените блок else в ответе Дмитрия Маркина, чтобы рекурсивно обновить все файлы проекта
else: # recursively update all project files in current directory:
rootdir = os.getcwd()
for root, subFolders, files in os.walk(rootdir):
for filename in files:
if(filename.endswith('.vcxproj')):
filePath = os.path.join(root, filename)
print "file: %s" % (filePath)
updateProject(filePath)
Создан 28 июн.
Я пришел сюда в поисках ответа на эту ошибку. Мне жаль, что мыльный пузырь лопнул. Ни один из ответов не сработал для меня. Моя ошибка заключалась в том, что я определил 3 макроса с одинаковым идентификатором. Вот почему я получил ошибку, упомянутую в вопросе.
мой код раньше, когда показывалась ошибка:
#define IDB_MARKER_NORMAL_LINE 21**6**
#define IDB_MARKER_ARROW_LINE 21**6**
#define IDB_MARKER_DOTTED_LINE 21**6**
я изменил его на:
#define IDB_MARKER_NORMAL_LINE 21**6**
#define IDB_MARKER_ARROW_LINE 21**7**
#define IDB_MARKER_DOTTED_LINE 21**8**
Ошибки ПРОШЛИ!!!!!!!!!!
Создан 23 янв.
У меня было это, и я сделал следующее в resource.h
#undef VS_VERSION_INFO
#define VS_VERSION_INFO 310
Поскольку VS_VERSION_INFO получает идентификатор ресурса 1 в WinRes.h, просто что-то еще решило мою проблему.
ответ дан 10 дек ’18, 16:12
Если вы столкнулись с этой ошибкой во время компиляции (обычно это проект, загруженный из Интернета), удалите файл манифеста и удалите ссылку на файл манифеста в файле .rc.
Этот ответ hB0 был на 100% правильным для случая, с которым я столкнулся.
Это было очень полезно для меня, и я хотел бы, чтобы другие узнали об этом, а не предполагали, что ответ hB0 следует игнорировать, потому что у других есть голоса, а у hB0 нет голосов. Я должен сказать это в отдельном ответе, потому что система не позволит незарегистрированному пользователю проголосовать. Я даже зарегистрировался, чтобы иметь возможность голосовать за этот ответ, но система по-прежнему не позволяет мне голосовать, пока я не стану более зрелым пользователем.
Этот ответ указывает на способ найти проблему, с которой я столкнулся. В моем сценарии у реквизита импорта есть этот код:
<ResourceCompile Include="$(VersioningDir)**Version.rc" />
Когда я удаляю его, вся работа делается.
ответ дан 10 мая ’19, 03:05
Если вы когда-либо сталкивались с ошибками ресурсов CVT1100 (дублирующийся ресурс) и LNK1123 (сбой при преобразовании в COFF) в Visual Studio 20XX, выполните следующие шаги для ее устранения.
-
Откройте файл .rc и прокомментируйте / удалите ниже MACRO
MOVEABLE PURE «res.manifest»
2 Переименуйте / удалите файл манифеста из папки ресурсов из каталога проекта.
Теперь перестройте решение и наслаждайтесь…
ответ дан 16 апр.
Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками
visual-studio-2010
resources
or задайте свой вопрос.