2012-03-24 3 views
0

Я пытаюсь связать статическую библиотеку в динамической библиотеке tmxParser.lib в Visual Studio 2010 express. У меня статическая библиотека установлена ​​как зависимость динамической библиотеки. Когда VS строит статическую библиотеку, строит отлично и создает tmxParser.lib. Когда VS строит динамическую библиотеку, я получаю ошибки компоновщика. Я попытался сопоставить библиотеку Runtime по странице свойств -> Свойства конфигурации -> C/C++ -> Генерация кода Это не помогает. У кого-нибудь есть идея?Возможно ли связать статическую библиотеку с динамической библиотекой в ​​Visual Studio?

2>LIBCMTD.lib(fopen.obj) : error LNK2005: _fopen already defined in s3e_d.lib(iwcrt_stdio.obj) 
2>LIBCMTD.lib(open.obj) : error LNK2005: __open already defined in s3e_d.lib(iwcrt_win32.obj) 
2>LIBCMTD.lib(open.obj) : error LNK2005: __sopen already defined in s3e_d.lib(iwcrt_win32.obj) 
2>LIBCMTD.lib(chsize.obj) : error LNK2005: __chsize already defined in s3e_d.lib(iwcrt_win32.obj) 
2>LIBCMTD.lib(read.obj) : error LNK2005: __read already defined in s3e_d.lib(iwcrt_win32.obj) 
2>LIBCMTD.lib(close.obj) : error LNK2005: __close already defined in s3e_d.lib(iwcrt_win32.obj) 
2>LIBCMTD.lib(lseek.obj) : error LNK2005: __lseek already defined in s3e_d.lib(iwcrt_win32.obj) 
2>LIBCMTD.lib(setmode.obj) : error LNK2005: __setmode already defined in s3e_d.lib(iwcrt_win32.obj) 
+0

Лучше всего использовать их выделенный форум: http://www.madewithmarmalade.com/devnet/forum/general –

+0

Спасибо, что ответили. Я уже пробовал свой форум, но не ответил. – user1290166

+0

Да, это типично. Обещания «бегут куда угодно!» обратно пропорциональны поддержке и удаче с помощью модели исполнения. –

ответ

0

Когда вы говорите, что он установлен как зависимость, вы имеете в виду вы его установить как зависимость проекта или в разделе «Дополнительные зависимости» в

Project Properties -> Librarian->General -> Additional Dependencies

0

В общем, да.

Проблема заключается в том, что библиотека (это marmalade library?) Реализует некоторые из методов из библиотеки времени выполнения C++. Вероятно, этот lib предполагается использовать без ссылки на стандартную библиотеку времени исполнения.

Возможные решения:

  • не Шунт C++ во время выполнения в вашей DLL. Это должно быть возможным, если вы пишете только тонкая обертка
  • Попросите ребят сделать Либерал, как они думали, что это должно работать
  • использовать lib.exe или dumpbin.exe к:
    • экстракт все .obj файлы либерал
    • удалить конфликтующие символы из .obj файлов
    • воссоздать LIB

Последнее Obvio usly уродливый взломать, и он должен быть зарезервирован для случаев, когда ни источник, ни оригинальный разработчик больше не доступны.

+0

спасибо за помощь. Причина, по которой я думаю, что tmxParser является статической библиотекой, состояла в том, что, когда я могу получить тип вывода динамической библиотеки из dll в static libray (.lib), все ошибки компоновщика исчезли. Но приложение будет ошибочно во время выполнения. В итоге я просто включил источник tmxParser в основное приложение. Хотя мне пришлось изменить код tmxParser, чтобы он не требовал стандартной библиотеки времени исполнения. – user1290166

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