2016-07-14 4 views
0

Ich benutze einen Header namens header.h in main.c. Der Funktionstest wird in header.h angekündigt und in test.c. definiert. Jedoch sagt es Worte unten, obwohl ich System bauen verwenden, wie C.Wie kompiliere ich mit externer Header-Datei in erhabenen Text in C?

clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated 
Undefined symbols for architecture x86_64: 
    "test(int)", referenced from: 
    _main in main-a4d82e.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
[Finished in 0.6s with exit code 1] 
[cmd: ['bash', '-c', 'g++ -Wall -std=c++11 -O2 \'/Users/hanlock/Documents/CODE/TEST/TEST/main.c\' -o \'/Users/hanlock/Documents/CODE/TEST/TEST/main\' && osascript -e \'tell application "Terminal" to activate do script " cd \\"/Users/hanlock/Documents/CODE/TEST/TEST\\" &&start_ms=$(ruby -e \\"puts (Time.now.to_f * 1000).to_i\\")&&clear&&\\"/Users/hanlock/Documents/CODE/TEST/TEST/main\\" &&elapsed_ms=$(($(ruby -e \\"puts (Time.now.to_f * 1000).to_i\\") - start_ms))&& read -p \\"Press Enter to exit($elapsed_ms ms).\\"&&exit"\'']] 
[dir: /Users/hanlock/Documents/CODE/TEST/TEST] 
[path: /usr/bin:/bin:/usr/sbin:/sbin] 

ich ähnliche Fragen zu diesem Thema in C++ gelesen habe. In meinem Fall scheint es jedoch nicht zu funktionieren. Also, hier kommt das Problem. Wie kann ich externe Header-Datei mit erhabener verwenden in der Sprache C.

Hier ist der Code:

main.c

#include <stdio.h> 
#include "./Header.h" 
int main(int argc, const char * argv[]) { 
    test(1); 
    return 0; 
} 

header.h

#ifndef Header_h 
#define Header_h 
int test(int); 
#endif 

test.c

#include <stdio.h> 
int test(int i){ 
    printf("%d\n",i); 
    return 0; 
} 
+0

könnten Sie Ihren Code und den Befehl, die Sie verwenden, um es zu kompilieren? –

+0

Sicher. Es ist bearbeitet. BTW, es funktioniert in Xcode mit den gleichen Codes. – LEO

+0

die Namen scheinen nicht übereinzustimmen, ist die Kopfzeile namens head.h oder Header.h? –

Antwort

0

In test.c:

#include "header.h" 

In der Shell:

gcc -I [dir] test.c 

Dadurch werden alle externen Header namens header.h in dir befindet umfassen. Ich hoffe das beantwortet deine Frage.

+0

Entschuldigung, aber was bedeutet "in deiner Schale". was bedeutet es genau? – LEO

+0

Werfen Sie einen Blick hier: http://StackOverflow.com/A/18100051/6523756 In cmd, fügen Sie "-I" und Ihr Verzeichnis. –

+0

Ich habe es versucht, aber ich kann es immer noch nicht schaffen. Ich habe versucht, den empfohlenen Code einzufügen oder $ file_name in test.c zu ändern oder Pfad zu working_dir hinzuzufügen. Sie haben einfach nicht funktioniert. Ich bin ein bisschen verwirrt darüber. Tut mir leid, das zu sagen, aber ich fange an zu lernen, wie man es benutzt. – LEO

Verwandte Themen