Mam funkcję zdefiniowaną w pliku .c
(słownie funcs.c):nierozwiązywalne symbol 'name' odwołuje się wypowiedzi
void *funName()
{
//implementation
}
i skompilowany do biblioteki (libname.so
).
A ja kompilacji innego .c
pliku (main.c), który korzysta z tej funkcji, a ja ustawiania nazw symboli w linii poleceń:
gcc -Wl,--just-symbols=symbolsfile.txt main.c -o main -lname
symbolsfile.txt:
FunSym = funName;
Symbol2 = expression2;
...
ale dostaję ten błąd: łączenie
symbolsfile.txt:1: unresolvable symbol 'funName' referenced in expression
symbolsfile.txt:2: unresolvable symbol 'expression2' referenced in expression
collect2.exe: error: ld returned 1 exit status
Próbowałem dodać deklarację funkcji w funcs.c (nie mam odpowiedniego pliku .h
), ale to się nie zmieniło.
Jeśli zmienię FunSym = funName
do FunSym = garbage
, zmiany błędu do „niezdefiniowany symbol ...”, więc myślę, że wyrażenie funName
znaleziono.
Aktualizacja:
Próbowałem dodanie extern void *funName();
na szczycie main.c lub w osobnym pliku nagłówka jako sugerowane w komentarzach, ale to nie rozwiązało problemu (sam błąd). Czy flaga --just-symbols
musi być dodana podczas kompilowania/kompilowania biblioteki (libname.so)?
masz plik nagłówka z interfejsem do udostępnionego lib? Czy lib jest dostępny: może musisz dodać opcję '-L'? – LPs
'-lname.so' ->' -lname' – LPs
@LPs Tak, to literówka w poście (naprawiona teraz). Właściwie to piszę "-lname". I tak, jest osiągalny. (Mam '-L') –