2017-11-07 2 views
1

Ich habe einen Code mit pthreads par.c genannt, aber wenn ich versuche, es mit dem Befehl zu kompilieren: gcc par.c -lpthread -o par, es gibt mir dies:undefined reference in gcc pThreads funktioniert C

/tmp/ccAzMTL8.o: In function `compare': par.c:(.text+0x414): undefined reference to `exchange' 

die Funktion

inline void exchange(int i, int j) { 
    int t; 
    t = a[i]; 
    a[i] = a[j]; 
    a[j] = t; 
} 

inline void compare(int i, int j, int dir) { 
    if (dir==(a[i]>a[j])) 
    exchange(i,j); 
} 

Und in Haupt habe ich sie beide:

void compare(int i, int j, int dir); 
inline void exchange(int i, int j); 

Hat jemand ein y Ideen, warum passiert das?

+0

alles ist in der gleichen Textdatei –

+0

Es tut mir leid, ich meinte eine Textdatei, die ich par.c –

+0

nannte es gibt eine Möglichkeit, ich kann Ihnen eine Uhr geschickt? Der Code ist ziemlich groß und lässt mich nicht posten –

Antwort

0

Ich nehme an, dass der gesamte Code, den Sie gepostet haben, sich in der gleichen .c-Datei befindet.

Ich hatte das gleiche Problem in der Vergangenheit. Sie müssen die Implementierungen der Inline-Funktionen als static inline deklarieren. static bedeutet, dass die Funktion nur in der gleichen Kompilierungseinheit verknüpft werden kann (wie sie für diese .c-Datei privat ist). Dies sollte für die Inline-Funktion sowieso der Fall sein, also kann ich Ihnen nicht sagen, warum es einen Unterschied macht, aber es hat für mich funktioniert.

+0

Es hat funktioniert !!! Vielen Dank !!! : D: D –

+0

Bitte akzeptieren Sie immer die Antwort, wenn das Problem gelöst wurde. –