Статические библиотеки - PullRequest
       0

Статические библиотеки

0 голосов
/ 08 октября 2011

У меня проблема со статическими библиотеками.Мне нужно использовать 2 разные версии одного и того же SDK в одной DLL без конфликтов имен.Я думал, что решение состоит в том, чтобы сделать 2 статических библиотеки для каждой версии SDK, а затем импортировать эти библиотеки в DLL.Но это решение работает странно, и я не уверен, почему ....

упрощенная ситуация выглядит следующим образом:

LIB1 - есть функция Add1, которая использует вещи из SDK 1.0

LIB2 - есть функция Add2, которая использует вещи из SDK 2.0

DLL - импортирует LIB1 и LIB2, и есть функция Add (плавающая версия), которая вызывает Add1 или Add2 - зависит от номера версии в параметре

Процесс компиляции в порядке, но DLL работает только с одной версией SDK: (

Когда я отлаживаю ее, я вижу, что программа вызывает функцию Add из DLL с версией 2.0 в параметре. Затем Add действительно вызывает Add2 - так чтовсе еще прав. НО тогда внутри функции Add2 он использует вещи, которые определены в SDK 1.0 вместо SDK 2.0! LIB2 действительно создан с SDK 2.0. (include dirs и lib dirs установлены на SDK 2.0)

Такпочему он использует SDK 1.0 ???: (

Это из-за компоновщика, который объединяет все вместе, когда я создаю DLL, и символы из SDK 1.0 переопределяют символы из SDK 2.0 ???(нет разных пространств имен).

У вас есть идеи, где проблема, и есть ли решение ???

Большое спасибо!

Я использую Visual C ++ 2010 ...

1 Ответ

2 голосов
/ 08 октября 2011

Наблюдаемое вами поведение, вероятно, вызвано порядком, в котором библиотеки перечислены в параметрах компоновщика.Попробуйте перечислить их в обратном порядке, и вы вполне можете наблюдать «противоположное» поведение.

Я не думаю, что вы сможете смешивать и сочетать либы, которые имеют такие же символы, как этот.Лучше всего обернуть по крайней мере одну из библиотек (или обе) в отдельную библиотеку DLL, которая бы выставляла различные символы для вашей "клиентской" библиотеки DLL (то есть разные пространства имен или даже разные имена).

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