Связывание кода, скомпилированного с VC ++ 10, с кодом, скомпилированным с VC ++ 9 - PullRequest
1 голос
/ 18 января 2012

В нашем проекте используется VC ++ 9 с VS2008, и мы хотим перейти на VC ++ 10 с VS2010, чтобы использовать новые функции. К сожалению, некоторые из наших зависимостей были созданы с помощью VC ++ 9, и перекомпиляция их с помощью VC ++ 10 в настоящее время невозможна по разным причинам. Поскольку мы действительно хотим переключиться, есть ли способ просто связать эти библиотеки или нет совместимости между двоичными файлами VC ++ 10 и VC ++ 9?

РЕДАКТИРОВАТЬ: фактические зависимости BWAPI и BWTA . В случае BWAPI это не проблема, но BWTA зависит от CGAL , и это то, что доставляет нам неприятности. Попытка связать его приводит к множеству ошибок связывания.

Ответы [ 3 ]

1 голос
/ 18 января 2012

Выпуски Visual Studio могут нарушать совместимость ABI. Это означает, что экспортированная и внутренняя подпись классов C ++ отличается, и передача, например, std::string из двоичного файла, скомпилированного с одной версией, в двоичный файл, скомпилированный с другой версией, может не дать ожидаемого результата. Короче говоря: не полагайтесь на это работает. Если это произойдет, вам повезет, но на территории "неопределенного поведения" на уровне среды выполнения. Просто исправьте ваш код для сборки с VS2010. Вероятно, он сломан для начала.

1 голос
/ 18 января 2012

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

0 голосов
/ 19 января 2012

хорошо в случае сторонней библиотеки, которую вы не можете изменить, типичный ответ - обернуть их простой dll, созданной с помощью VC2008 и вызывающей стороннюю для вас.Затем вы получаете контроль над тем, что раскрывается, поэтому вы можете вернуться к «стандартизированному» механизму, который работает с обоими компоновщиками.Это почти всегда вызовы функций C, поскольку C очень стандартизирован.

Проблема заключается в том, что MS изменяет ABI скомпилированного C ++, и я полагаю, что комитет по стандартам не предоставляет стандартный способ вызова двоичных файлов C ++.

Глядя на GCAL, это не кажется вам хорошим ответом, лучшее, что вы можете сделать в таких случаях, - это связаться с GCAL и дождаться перестроенного двоичного файла.


Но я только что проверил - его с открытым исходным кодом , восстановите его самостоятельно.Мало того, он уже поддерживает VS2010, поэтому восстановление должно быть простым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...