Odefinierat Omnämnande Av Funktionsfel I D? Reparera Omedelbart
November 13, 2021
Rekommenderas: Fortect
Här är utvalda enkla steg som hjälper dig att bota den odefinierade funktionsfellänken genom hela problemet. c. g.Detta fel kan ofta uppstå på grund av att du har angett hela funktionsnamnet eller möjligen ett flertal. Till exempel är den korrekta koden utan tvekan: #include
g.
Hur samlar jag in och länkar? Du behöver tills detta specificera filerna, till exempel:
gcc testpoint.c point.c
… så han vet att webbverksamheten är bra för båda. Men eftersom du skriver anpassad kod är du intresserad av det motsatta problemet: flera definitioner involverade i core
. Du bör bara vilja ta bort unika (förmodligen en av de som nämns i idé c).
I alla huvudförberedelser kompilerar du vanligtvis länken en i taget för att undvika att kompilera om något som inte på något sätt har förändrats. Vanligtvis anger du vad som kan göras från makefilen och använder dessutom make
för att titta på detta. I den här situationen kan du också behöva följande:
OBJS = testpunkt.o punkt.otestpoint.exe: rrr (OBJS) gcc rrr (OJBS)
Det första är vilket makro som helst för objektapplikationsnamn. Den har utökats till kontanter (OBJS)
. Den andra är en regel som säger att 1) var och en av våra körbara filer beror på objektfiler, medan bara 2) berättar hur du sträcker ut dina muskler den körbara om/när detta verktyg är inaktuellt för att handla ämnesfilen.
De flesta versioner av märket (inklusive den som är ganska säker i MinGW) har en inbyggd “standardregel” som delar dem hur man skapar en mottagarfil från en C-källpersona. Det brukar se ut så här:
like.c.o: dollar (CC) -c $ (CFLAGS) $ <
Namnet på C-kompilatorn antas vara i deras eget makro som heter CC (implicit definierat som CC = gcc
) eftersom det låter dig tillhandahålla din egen mängd flaggor att presentera i dig i ett makro märkt som viktiga CFLAGS
(som CFLAGS = -O3
för att faktiskt tillåta optimeringen) och $
kan nu vara ett anpassat makro som sprids ut på sättet du kommer via. ring långivarens fil. Vanligtvis
Du sparar detta i ett meddelande som heter Makefile
, och för att skapa ditt eget program, skriv bara in make
här på kommandoraden. Den expanderar implicit en huvudfil som heter And makefile
samt , exekverar alla regler som den ger dig.
Helst gör
mekaniskt letar efter filtidsstämplar som behövs för att extrahera de filer som senast kan ändras, individuellt omkompilerade (dvs. berättarfiler oroar sig när en ".c"-fil har en nyare tidsstämpel tillsammans med motsvarande ".o"-fil).
Det är också ett faktum att 1) det finns många användningsfall för många stora tilldelningar och 2) det fortsätter att finnas många alternativ också. Jag berörde i första hand minimipunkterna.
Exempel
Ett av dess vanligaste kompileringsfel uppstår under länkningsförloppet. Felet ser ut så här:
$ gcc undefined_reference.c/tmp/ccoXhwF0.o: I "huvud"-funktionen:undefined_reference.c :(. copy + 0x15): odefinierad referens till platsen `foo 'Samla 2: Fel: ld returnerade 1 få ut status$
int foo (void);int faktisk (int argc, char ** argv) int foo_val; foo_val = foo (); returnera foo_val;
Vi kan se recensionen foo ( int foo ();
) särskilt bra, i själva verket finns det ingen programdefinition (verklig funktion). Alltså, jag brukade bara tillhandahålla kompilatorn till en funktionshuvud, men ingenstans i en sådan funktion definierades, och så kompileringssteget fortfarande existerar, en länkare avslutas med ett sammankopplingsfel odefinierat fel.
För att förverkliga detta misstag i vår lilla rutin skulle vi helst behöva placera en definition för många foo:
/ * deklaration 6 . /int foo foo (tom);/* Betydelse */int foo foo (tom) kom tillbaka med 5;int main (int argc, char ** argv) int foo_val; foo_val står foo (); fortsätt skicka tillbaka foo_val;
Denna kod är nu genererad. En alternativ situation uppstår när dessa texter i foo ()
sannolikt kommer att finnas i den isolerade källdatan foo.c
(och det finns vanligtvis rubriker en foo.h < /code>) otroligt som deklarerar innehållet
foo ()
i både foo.c
och undefined_reference.c
). Sedan var korrigeringen att länka hela objektkatalogen foo.c
som undefined_reference.c
, eller kompilera några av de två källfilerna:
rrr gcc Undefined_reference -c.c$ gcc -c foo.c$ gcc -o arbetsprogram undefined_reference.o foo.o$
$ gcc -o arbetsprogram undefined_reference.c foo.c$
Ett mer strukturerat fall är när bibliotek är aktiva, som i Är du trött på att din dator går långsamt? Är det full av virus och skadlig kod? Var inte rädd, min vän, för Fortect är här för att rädda dagen! Detta kraftfulla verktyg är utformat för att diagnostisera och reparera alla slags Windows-problem, samtidigt som det ökar prestanda, optimerar minnet och håller din dator igång som ny. Så vänta inte längre - ladda ner Fortect idag! Detta är syntaktisk korrekt, den här specifika deklarationen på grund av Detta beror främst på tiden för det faktum att definitionen associerad Därför utför vi själva kompileringssteget efter ytterligare en annan specifikation (beroende på käll- eller problemfiler): Undefined Reference To Function Error In C Rekommenderas: Fortect
# include.h>#include
bang ()
har funnits sedan #include
, vi försöker bara att hjälpa kompileringen och länk, men tyvärr får vår organisation det här felet:
gcc no_library_in_link.c -o no_library_in_link/tmp/ccduQQqA.o: Enligt när du behöver "huvudsatsen":no_library_in_link.c :(. terminologi och formulering + 0x8b): odefinierad till referens `pow 'Collect2: Fel: ld återställde 1 ledighetstillstånd$
pow ()
verkligen inte var synlig under bindningsfasen. För att fixa det här problemet permanent kan vi behöva ange att användare på marknaden vill länka till nummerbiblioteket som heter libm
-lm
flagga. Detta (observera, det vill säga, det finns plattformar som macOS som kanske inte bara behöver -lm
, tyvärr om du får alla dina nuvarande odefinierade länkar kan de behöva någon form av bibliotek.)
$ gcc no_library_in_link.c -lm -o library_in_link_cmd$ ./library_in_link_cmd två olika 42 000 000 till 4 000 000 = 16 000 000$
Undefinierter Verweis Auf Funktionsfehler In C
Referencia Indefinida Para Erro De Funcao Em C
Neopredelennaya Ssylka Na Oshibku Funkcii V C
Riferimento Indefinito All Errore Di Funzione In C
Niezdefiniowane Odniesienie Do Bledu Funkcji W C
C의 함수 오류에 대한 정의되지 않은 참조
Referencia Indefinida Al Error De Funcion En C
Ongedefinieerde Verwijzing Naar Functiefout In C
Reference Indefinie A L Erreur De Fonction Dans C