У меня есть программа (z.exe), которую я создаю из коллекции сторонних статических библиотек (A.Lib и B.Lib), а также моего собственного DLL (x.dll). К сожалению, как A.Lib, так и X.DLL используют тот же сторонний исходный код, который определяет функцию, называемую somefunc (). Объектный файл, где somefunc определяется в A.Lib, также включает в себя другие определения функций, необходимые в компиляции.
. Обратите внимание, что B.Lib действительно включает в себя вызов somefunc . Однако, если я переключаю A и B (заказ теперь B, a, x) EXE компилируется без проблем.
Я считаю, что причина, по которой этот порядок (Bax vs Abx) имеет важное значение, заключается в следующем ... если линкер обрабатывает B.Lib в первую очередь (с использованием порядка Bax), он видит нерешенное призыв некоторогофунка . Следующая библиотека, которую он обрабатывает, - это A.Lib, где находит определение somefunc , и разрешает вызов. Определение somefunc в x.dll не используется, и нет проблем с линкером. Однако, если вместо этого A.Lib обрабатывается сначала (с использованием порядка ABX), за которым следует B.Lib, он видит только неразрешенный призыв somefunc после , который он видел и, возможно, игнорировал определение somefunc в A.Lib, так что есть все возможности, которые он найдет какое -то определение в X.DLL. Затем, любые последующие попытки загрузить объектный код в A.Lib (рядом с тем, где somefunc приведет к тому, что в целом файл объекта, включая дублированное определение somefunc , и мы получаем ошибку LNK2005. Линкер неверный? Кроме того, использование порядка связывания надежным/предсказуемым способом избежать такого линкера, подобных этому, при условии, что приведенное выше объяснение правильное?
Подробнее здесь: https://stackoverflow.com/questions/797 ... -behaviour
Понимание поведения линкера MSVC ⇐ C++
Программы на C++. Форум разработчиков
1757431572
Anonymous
У меня есть программа (z.exe), которую я создаю из коллекции сторонних статических библиотек (A.Lib и B.Lib), а также моего собственного DLL (x.dll). К сожалению, как A.Lib, так и X.DLL используют тот же сторонний исходный код, который определяет функцию, называемую somefunc (). Объектный файл, где somefunc определяется в A.Lib, также включает в себя другие определения функций, необходимые в компиляции.
. Обратите внимание, что B.Lib действительно включает в себя вызов somefunc . Однако, если я переключаю A и B (заказ теперь B, a, x) EXE компилируется без проблем.
Я считаю, что причина, по которой этот порядок (Bax vs Abx) имеет важное значение, заключается в следующем ... если линкер обрабатывает B.Lib в первую очередь (с использованием порядка Bax), он видит нерешенное призыв некоторогофунка . Следующая библиотека, которую он обрабатывает, - это A.Lib, где находит определение somefunc , и разрешает вызов. Определение somefunc в x.dll не используется, и нет проблем с линкером. Однако, если вместо этого A.Lib обрабатывается сначала (с использованием порядка ABX), за которым следует B.Lib, он видит только неразрешенный призыв somefunc [b] после [/b], который он видел и, возможно, игнорировал определение somefunc в A.Lib, так что есть все возможности, которые он найдет какое -то определение в X.DLL. Затем, любые последующие попытки загрузить объектный код в A.Lib (рядом с тем, где somefunc приведет к тому, что в целом файл объекта, включая дублированное определение somefunc , и мы получаем ошибку LNK2005. Линкер неверный? Кроме того, использование порядка связывания надежным/предсказуемым способом избежать такого линкера, подобных этому, при условии, что приведенное выше объяснение правильное?
Подробнее здесь: [url]https://stackoverflow.com/questions/79759930/understanding-msvc-linker-behaviour[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия