/ / glib в C ++ на Visual Studio 2013 - c ++, c, компилация, visual-studio-2013, linker

glib в C ++ на Visual Studio 2013 - c ++, c, компилация, visual-studio-2013, linker

Опитвам се да компилирам C++ проект, който включва C библиотека SkelTrack който използва glib

Сега получавам цял куп от следните грешки:

LNK2019: unresolved external symbol _g_slice_alloc referenced in function _pqueue_new   C:....pqueue.obj
LNK2019: unresolved external symbol _g_error_new referenced in function _skeltrack_skeleton_track_joints_sync skeltrack-skeleton.obj
LNK2019: unresolved external symbol _g_mutex_init referenced in function _skeltrack_skeleton_init skeltrack-skeleton.obj
LNK2019: unresolved external symbol _g_mutex_clear referenced in function _skeltrack_skeleton_finalize    skeltrack-skeleton.obj
LNK2019: unresolved external symbol _g_mutex_lock referenced in function _skeltrack_skeleton_track_joints skeltrack-skeleton.obj
LNK2019: unresolved external symbol _g_mutex_unlock referenced in function _skeltrack_skeleton_track_joints   skeltrack-skeleton.obj
LNK2019: unresolved external symbol _g_once_init_enter referenced in function _skeltrack_skeleton_get_type    skeltrack-skeleton.obj
LNK2019: unresolved external symbol _g_once_init_leave referenced in function _skeltrack_skeleton_get_type    skeltrack-skeleton.obj

Връзка към SkelTrack кодови референции glib: https://github.com/joaquimrocha/Skeltrack/blob/master/skeltrack/pqueue.c#L34

Трябва да кажа, че разбирането ми за процеса на компилация - особено за Windows - е доста неясно, но има някои точки от това, което според мен е релевантна информация:

  • Аз инсталирах glib 2.36 чрез NuGet.
  • Неразрешените функции са в glib тъй като по-ранните версии; така че не мисля, че това е проблемът.
  • SkelTrack се компилира като C89 защото това е това, което VS харесва най-добре. Трябваше да оправя няколко декларации, които не бяха в началото на блока.
  • Аз дори не включвам никаква част от SkelTrack в останалата част от проекта.

РЕДАКТИРАНЕ

  • Добавих папката C:[...]packagesglib.2.36.2.11buildnativelibv110Win32Debugdynamic при VC++ Directories -> Library Directories Тази папка съдържа glib-2.0.lib.

EDIT 2

аз имам деинсталирахте NuGet glib, изтеглени glib за Win32 ръчно и добави include и lib към конфигурацията на проекта (C / C ++ Допълнителни Include и VC ++ Library Directories, съответно).

Имах всички видове синтактични грешки като:

C2143: syntax error : missing "{" before "const"    c:[....]glib-devincludeglib-2.0glibgutils.h   122

Но те бяха коригирани този съвет:

В gutils.h линии 82 и 122, и в gstring.h ред 129, промяна "static inline" до "static __inline".

И сега се връщам към unresolved external грешки.

EDIT: ОТГОВОРНОСТ?

Забравях да добавя glib-2.0.lib, gio-2.0.lib, и т.н.

Linker> Въвеждане> Допълнителни зависимости

Отговори:

1 за отговор № 1

Имах подобна борба с Visual Studio 2015 и успях да намеря пакета NuGet; Ето какво направих:

Стъпка 1 (Предварителни условия)

  • Инсталирайте пакета glib NuGet.
  • Създайте директория, която да добавите glibconfig.h (Аз го добавих libGlib23include).

Стъпка 2 (свойства на проекта)

  • Отидете на "VC ++ Directories" в Configuration Properties и добавете следното към "Library Reference":

    $(SolutionDir)packagesglib.2.36.2.11buildnativelibv110$(Platform)$(Configuration)dynamic
    
  • В "C / C ++" добавете следното към "Additional Include Directories":

    $(SolutionDir)libGlib23include
    $(SolutionDir)packagesglib.2.36.2.11buildnativeinclude
    

    Първият ред трябва да е мястото, където сте поставили glibconfig.h

  • Сега в "Linker" добавете към "Допълнителни зависимости":

    glib-2.0.lib gio-2.0.lib gmodule-2.0.lib gobject-2.0.lib gthread-2.0.lib
    

Трябва да сте в състояние да компилирате сега, но DLL-тата все още липсват в изходната папка, така че да не можете да стартирате програмата.

Стъпка 3 (Копиране на DLL)

  • В "Build Events" / "Post-Build Event" задайте командния ред на следното:

    xcopy /y /d "$(SolutionDir)packagesglib.redist.2.36.2.11buildnativebinv110$(Platform)$(Configuration)dynamic*.dll" "$(OutDir)"
    xcopy /y /d "$(SolutionDir)packageslibintl.redist.0.18.2.10buildnativebinv110$(Platform)$(Configuration)dynamiccdecl*.dll" "$(OutDir)"
    

Сега би трябвало да можете да стартирате програмата си без да компилирате ръчно glib.