Visual Studio 2010 C++ - Как обернуть.lib файлы для повторного использования

Я использую C++ с Visual Studio 2010. Я пытаюсь создать клиент-серверную архитектуру, в которой и клиент, и сервер используют один и тот же "движок".

Ниже приведена схема, которая объясняет это:

http://img266.imageshack.us/img266/5573/dependencies.png

Куда:

Двигатель - конкретный двигатель

BaseEngine - не зависящий от приложения движок (используется другими приложениями)

SomeLibrary - библиотека, от которой зависит BaseEngine

Используя Visual Studio, я установил соответствующие ссылки проекта и "Включить каталоги".

Клиент может видеть методы в Engine, а Engine может видеть методы в BaseEngine. Однако проблема в том, что я получаю несколько ошибок Link (LNK1120, LNK2001), когда клиент и / или сервер вызывают методы в Engine.

Кажется, что это происходит, потому что Engine полагается на BaseEngine, а клиент не зависит от BaseEngine.

Итак, мой вопрос:

Есть ли в любом случае, что проекты Engine и BaseEngine могут быть упакованы так, чтобы клиенту и серверу не нужно было ссылаться на BaseEngine?

1 ответ

Решение

Вопрос в том, связаны ли ошибки компоновщика с Engine.lib или BaseEngine.lib?
Я предполагаю, что у вас есть проблемы с функциями, экспортированными BaseEngine.lib и ссылками на клиент / сервер, которые приводят к неразрешенным символам.
Если ваш клиент / сервер полагается на функциональность, экспортированную BaseEngine.lib, но вы ссылаетесь только на Engine.lib, вы должны либо напрямую ссылаться на библиотеку BaseEngine, либо заставить Engine.lib пересылать эти функции, предоставляемые BaseEngine.lib, явно.
Тот факт, что Engine.lib действительно зависит (и ссылается) на BaseEngine.lib, не означает, что функциональность BaseEngine.lib беспрепятственно передана Engine.lib. Я полагаю, вы наткнулись на это предположение. Компоновщик просто включает в себя функциональность от BaseEngine.lib до Engine.lib, если они действительно необходимы. Но ни одна из этих функций не видна для дальнейших зависимостей (клиент / сервер в вашем случае), пока вы не сделаете это явно. Я бы предложил вам написать какую-нибудь функциональную оболочку в Engine.lib для пересылки функций из BaseEngine.lib, на которые ссылается клиент / сервер.

Другие вопросы по тегам