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
sottoVC++ Directories -> Library Directories
Questa cartella contieneglib-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 № 1Ho 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 alibGlib23include
).
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.