/ / glib in c ++ su Visual Studio 2013 - c ++, c, compilation, visual-studio-2013, linker

glib in c ++ su Visual Studio 2013 - c ++, c, compilation, visual-studio-2013, linker

Sto cercando di compilare a C++ progetto che include il C biblioteca SkelTrack che usa glib

Ora, ho un sacco di errori seguenti:

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

Collegamento a SkelTrack codice di riferimento glib: https://github.com/joaquimrocha/Skeltrack/blob/master/skeltrack/pqueue.c#L34

Devo dire che la mia comprensione del processo di compilazione, specialmente su Windows, è piuttosto vaga, ma qui ci sono alcuni punti di ciò che penso siano informazioni rilevanti:

  • Ho installato glib 2.36 attraverso NuGet.
  • Le funzioni non risolte sono state incluse glib dalle versioni precedenti; quindi non penso che sia il problema.
  • SkelTrack è compilato come C89 perché è quello che piace a VS. Ho dovuto correggere alcune dichiarazioni che non erano all'inizio del blocco.
  • Non includo nemmeno parte di SkelTrack nel resto del progetto ancora.

MODIFICARE

  • Ho aggiunto la cartella C:[...]packagesglib.2.36.2.11buildnativelibv110Win32Debugdynamic sotto VC++ Directories -> Library Directories Questa cartella contiene glib-2.0.lib.

MODIFICA 2

io ho disinstallato il NuGet glib, scaricato glib per Win32 manualmente e aggiunto il include e lib alla config del progetto (C / C ++ Additional Include e VC ++ Library Directories, rispettivamente).

Ho avuto tutti i tipi di errori di sintassi come:

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

Ma sono stati risolti usando questo suggerimento:

In gutils.h le righe 82 e 122 e in gstring.h la riga 129 cambiano "statico in linea" a "statico __inline".

E ora sono tornato al unresolved external errori.

EDIT: RISPOSTA?

Mi stavo dimenticando di aggiungere glib-2.0.lib, gio-2.0.lib, ecc. a

Linker> Input> Dipendenze aggiuntive

risposte:

1 per risposta № 1

Ho avuto una lotta simile con Visual Studio 2015 e sono riuscito a far funzionare il pacchetto NuGet; ecco quello che ho fatto:

Passaggio 1 (Prerequisiti)

  • Installa il pacchetto NuGet di glib.
  • Crea una directory dove aggiungi glibconfig.h (L'ho aggiunto a libGlib23include).

Passaggio 2 (Proprietà del progetto)

  • Vai a "Directory VC ++" in Proprietà di configurazione e aggiungi quanto segue a "Riferimenti biblioteche":

    $(SolutionDir)packagesglib.2.36.2.11buildnativelibv110$(Platform)$(Configuration)dynamic
    
  • In "C / C ++" aggiungi quanto segue a "Directory di inclusione aggiuntive":

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

    La prima riga dovrebbe essere la posizione in cui si inserisce glibconfig.h

  • Ora in "Linker" aggiungi a "Ulteriori dipendenze":

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

Dovresti essere in grado di compilare ora, ma le DLL mancano ancora nella cartella di output in modo da non poter eseguire il programma.

Passaggio 3 (Copia DLL)

  • In "Build Events" / "Post-Build Event" imposta la riga di comando come segue:

    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)"
    

Ora dovresti essere in grado di eseguire il tuo programma senza compilare manualmente glib.