2012-01-28 2 views
2

Я пытаюсь добавить звуковую библиотеку в проект GLFW/OpenGL в окнах. Я установил звуковой проект для вывода статической библиотеки (.lib). Он прекрасно компилируется.Невозможно связать мои собственные статические библиотеки

В моем основном проекте я добавляю ссылку на звук и зависимость от звука (чтобы изменить порядок сборки). Я включаю «.. \ Sound \ sound.h» в моем main.cpp, и Intellisense доволен всем. Все компилируется хорошо. Тем не менее, компоновщик разозлил:

1>Link: 
1> LINK : ###\Projects\DeathRace\Debug\DeathRace.exe not found or not built by the last incremental link; performing full link 
1>Sound.lib(sound.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in base_objects.obj 
1>LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; use /NODEFAULTLIB:library 
1>Sound.lib(sound.obj) : error LNK2019: unresolved external symbol __imp__alListenerfv referenced in function "public: bool __thiscall SoundAPI::Startup(void)" ([email protected]@@QAE_NXZ) 
1>Sound.lib(sound.obj) : error LNK2019: unresolved external symbol __imp__alListener3f referenced in function "public: bool __thiscall SoundAPI::Startup(void)" ([email protected]@@QAE_NXZ) 
1>Sound.lib(sound.obj) : error LNK2019: unresolved external symbol __imp__alGetError referenced in function "public: bool __thiscall SoundAPI::Startup(void)" ([email protected]@@QAE_NXZ) 
1>Sound.lib(sound.obj) : error LNK2019: unresolved external symbol __imp__alutGetError referenced in function "public: bool __thiscall SoundAPI::Startup(void)" ([email protected]@@QAE_NXZ) 
1>Sound.lib(sound.obj) : error LNK2019: unresolved external symbol __imp__alutInit referenced in function "public: bool __thiscall SoundAPI::Startup(void)" ([email protected]@@QAE_NXZ) 
1>Sound.lib(sound.obj) : error LNK2019: unresolved external symbol __imp__alutExit referenced in function "public: bool __thiscall SoundAPI::Shutdown(void)" ([email protected]@@QAE_NXZ) 
1>Sound.lib(sound.obj) : error LNK2019: unresolved external symbol __imp__alDeleteBuffers referenced in function "public: bool __thiscall SoundAPI::Shutdown(void)" ([email protected]@@QAE_NXZ) 
1>Sound.lib(sound.obj) : error LNK2019: unresolved external symbol __imp__alDeleteSources referenced in function "public: bool __thiscall SoundAPI::Shutdown(void)" ([email protected]@@QAE_NXZ) 
1>Sound.lib(sound.obj) : error LNK2019: unresolved external symbol __imp__alutCreateBufferFromFile referenced in function "public: unsigned int * __thiscall SoundAPI::LoadSound(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" ([email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@Z) 
1>Sound.lib(sound.obj) : error LNK2019: unresolved external symbol __imp__alSourcei referenced in function "public: unsigned int * __thiscall SoundAPI::CreateSource(void)" ([email protected]@@QAEPAIXZ) 
1>Sound.lib(sound.obj) : error LNK2019: unresolved external symbol __imp__alSource3f referenced in function "public: unsigned int * __thiscall SoundAPI::CreateSource(void)" ([email protected]@@QAEPAIXZ) 
1>Sound.lib(sound.obj) : error LNK2019: unresolved external symbol __imp__alSourcef referenced in function "public: unsigned int * __thiscall SoundAPI::CreateSource(void)" ([email protected]@@QAEPAIXZ) 
1>Sound.lib(sound.obj) : error LNK2019: unresolved external symbol __imp__alGenSources referenced in function "public: unsigned int * __thiscall SoundAPI::CreateSource(void)" ([email protected]@@QAEPAIXZ) 
1>Sound.lib(sound.obj) : error LNK2019: unresolved external symbol __imp__alSourceQueueBuffers referenced in function "public: bool __thiscall SoundAPI::Queue(unsigned int *,unsigned int *)" ([email protected]@@[email protected]) 
1>Sound.lib(sound.obj) : error LNK2019: unresolved external symbol __imp__alSourcePlay referenced in function "public: bool __thiscall SoundAPI::Play(unsigned int *)" ([email protected]@@[email protected]) 
1>Sound.lib(sound.obj) : error LNK2019: unresolved external symbol __imp__alSourcePause referenced in function "public: bool __thiscall SoundAPI::Pause(unsigned int *)" ([email protected]@@[email protected]) 
1>Sound.lib(sound.obj) : error LNK2019: unresolved external symbol __imp__alSourceStop referenced in function "public: bool __thiscall SoundAPI::Stop(unsigned int *)" ([email protected]@@[email protected]) 
1>###\Projects\DeathRace\Debug\DeathRace.exe : fatal error LNK1120: 17 unresolved externals 

У меня нет ИДЕИ, что с этим делать. Предполагается, что Lnk2038 означает проблему между отладкой и выпуском, но все в режиме отладки. Lnk2019 должен быть отлично против Sound.lib?

Очень важно!

+0

base_objects.obj (где бы это ни происходило), похоже, скомпилирован. –

+0

base_objects.h и .cpp определяют ряд абстрактных классов данных, таких как Object, PhysicsObject и StaticObject. Их свойства не отличаются от любых других кодовых файлов, лучше всего могу сказать. Что бы это вызвало (и как мне отменить)? – AGuyInAPlace

+0

Нелегкий способ рассказать о проблеме отладки/выпуска, не видя фактического проекта, но большинство ваших ошибок ссылок связаны с неправильной привязкой к OpenAL (ваша звуковая библиотека, похоже, использует ее, но не включает ее) –

ответ

1

Все в порядке с вашей библиотекой (за исключением того, что вы смешиваете отладочную версию и освобождаете ее). Вам нужно будет связать сборку отладки при создании программы в режиме отладки. То же самое верно и для релизов. Это для ошибки LNK2038 и предупреждения LNK4098.

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

Что вы должны сделать для этих ошибок, которые нужно решить, прост: привяжите полученный исполняемый файл к своему Sound.lib, а также правый файл библиотеки OpenAL, и все должно быть хорошо.

+0

Прохладный, спасибо! Как мне перейти от выпуска к debug для этого .obj-файла? Я в режиме «Отладка», и все, кажется, настроено для «Отладки» на всех страницах свойств. Возможно, что-то действительно отключено, поскольку base_objects - это первый файл, в алфавитном порядке. Разве на вкладке «Ссылки» не стоит привязываться ко мне? У него есть настройки для связывания зависимостей и входов в диалоговом окне? – AGuyInAPlace

+0

Просто понял, какой глупый вопрос был. Добавлен вход компоновщика для alut.lib и openal32.lib и lnk2019. Derp. Тем не менее, по-прежнему не могу понять, почему мой .obj находится в режиме освобождения – AGuyInAPlace

+0

Изменена моя библиотека времени выполнения от/MD до/MDd. Это сделал трюк! – AGuyInAPlace