2016-08-13 8 views
0

Я использую библиотеки OpenSceneGraph в своем приложении, и я хочу связать их статически, поэтому мне не нужно переносить библиотеки DLL с двоичным кодом. Я загрузил источники OpenSceneGraph 3.4.0 и сгенерировал проект Visual Studio с помощью cmake. Я отключил DYNAMIC_OPENSCENEGRAPH и DYNAMIC_OPENTHREADS в cmake GUI. После этого я успешно скомпилировал OSG и имею статические библиотеки (.lib). В моем приложении я добавил каталоги ввода и библиотеки в project properties -> VC++ Directories -> Include Directories & Library Directories (Кстати, я использую Visual Studio 2013). Я также добавил каталог с ОСГОМ .lib лет в Linker -> General -> Additional Library Directories и напечатал всю необходимую LIBS в Linker -> Input -> Additional Dependencies:Неразрешенные внешние ссылки на статические ссылки Библиотеки OpenSceneGraph в Visual Studio

ot20-OpenThreads.lib 
osg130-osg.lib 
osg130-osgUtil.lib 
osg130-osgGA.lib 
osg130-osgDB.lib 
osg130-osgViewer.lib 
osg130-osgText.lib 
opengl32.lib 
osgdb_3ds.lib 
osgdb_freetype.lib 
osgdb_png.lib 

И я все еще получаю неразрешенные внешние ошибки для OSG символов. Я также попытался установить General -> Character Set в Юникод, но это не помогло (в проекте OSG, созданном cmake, у меня есть многобайтовый символ). У меня нет никаких идей, как решить это сейчас, это моя первая компиляция приложения со статическими связанными библиотеками.

Я бы очень признателен за любую помощь.

P.s. Извините за отсутствие кода, я не могу его предоставить, но я стараюсь дать как можно больше подробностей. Благодаря динамической компоновке я могу создать приложение без проблем.

ответ

0

Мне удалось решить эту проблему самостоятельно. мне не хватало еще две библиотеки в Linker -> Input -> Additional Dependencies:

msvcrt.lib 
libcmt.lib 

И я также должен был добавить определение препроцессора OSG_LIBRARY_STATIC в C/C++ -> Preprocessor -> Preprocessor Definitions. Последнее, что добавлял эти несколько строк кода в моей main.cpp связать ОСГ плагины

#ifdef OSG_LIBRARY_STATIC 
    USE_OSGPLUGIN(freetype) 
    USE_OSGPLUGIN(png) 
    USE_OSGPLUGIN(3ds) 
#endif 

Теперь мое приложение успешно компиляции и работает :)

P.S. На первой сборке у меня были ошибки с плагинами PNG и FreeType, которые были вызваны отсутствием .lib-s для libpng и freetype. В моем случае ошибки были решены путем добавления libpng16_static.lib и freetype250.lib в Linker -> Input -> Additional Dependencies и копирования их в каталог моих библиотек (очевидно, другие плагины будут зависеть от других библиотек).