2010-12-06 2 views
0

Я пытаюсь построить решение в Visual C++, где у меня есть интерфейсный проект, который ссылается на проект DLL, который я создал. В проекте DLL я ссылаюсь на статическую библиотеку (которую я еще не написал), которая имеет статические объекты и определения. Все строит отлично, но у меня проблемы с привязкой.Использование DLL, которая ссылается на статический lib

У меня есть пара вопросов. Во-первых, я должен получить только нерешенные символы для объектов, которые я ссылаюсь в интерфейсе, которые не экспортируются, правильно? Я хочу, чтобы DLL была единственным интерфейсом для статической библиотеки и напрямую не ссылалась на какую-либо ее часть в интерфейсе, и все же я получаю из нее несколько нерешенных символов. Символы, как представляется, содержат #include и, по крайней мере, некоторые из них напрямую не связаны проектом DLL. Я подозреваю, что это связано со статическими объявлениями в статическом lib, но как я могу с ними справиться?

Некоторые из нерешенных ошибок символов:

2>AnalysisVis.obj : error LNK2001: unresolved external symbol "public: __thiscall SharkException::SharkException(char const *,int,char const *)" ([email protected]@[email protected]@Z) 
2>AnalysisVis.obj : error LNK2001: unresolved external symbol "public: static class Bernoulli Rng::coinToss" ([email protected]@@[email protected]@A) 
2>AnalysisVis.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall ChromosomeT<bool>::operator<(class Chromosome const &)const " ([email protected][email protected]@[email protected]@@Z) 
+0

Какой смысл использовать DLL в качестве интерфейса для статической библиотеки? Пожалуйста, объясни! – TonyK 2010-12-06 19:51:50

+0

DLL - это не просто интерфейс к статической библиотеке, он имеет свою собственную функциональность, но использует статическую библиотеку. – Nigel 2010-12-06 21:19:51

ответ

0

Экспортируемые символы искажены. Если статический lib был скомпилирован с использованием другого компилятора (или версии компилятора), чем тот, который вы используете, возможно, что символы, которые ваше приложение ожидает увидеть, были определены в статическом lib, используя другую схему переключения имен. Вы можете использовать следующую команду, чтобы получить имя коверкая используется в статическом Lib, а затем сравнить его с тем, в сообщении об ошибке:

>pushd <path_to_msvc_dir>\Microsoft Visual Studio X.0\VC\bin 
>dumpbin /all [static_lib_path] > out.txt 
>type out.txt | find /I "SharkException" 
>type out.txt | find /I "coinToss" 
>type out.txt | find /I "ChromosomeT" 

BTW, делает DLL, которая использует статическую LIB компилируется с тем же компилятор вашего приложения/решения?

Смежные вопросы