2015-03-24 5 views
0

Я пытаюсь создать базовую программу приветствия, но не удается решить некоторые проблемы с связыванием.Устранение проблем с экспортируемой функцией

в program.cpp

#include <iostream> 
#include <string> 
#include "scanner.h" 

using namespace std; 

int main() { 
    string result = createScanner(); 
    cout << result << endl; 
    return 0; 
} 

в scanner.h

#include <string> 

using namespace std; 

string createScanner(); 

в scanner.cpp

#include <scanner.h> 
#include <string> 

using namespace std; 

string createScanner() { 
    return "hello world"; 
} 

С помощью этого метода CLI:

clang++ -O3 -std=c++11 -stdlib=libc++ -I./includes/ -I./compiler/ compiler/program.cpp -o hej 

И я получаю эту ошибку:

Undefined symbols for architecture x86_64: 
    "createScanner()", referenced from: 
     _main in program-45fd7b.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
make: *** [all] Error 1 
+0

Добавить 'scanner.cpp' в командной строке тоже. –

+0

Не '-I./Компилятор /' достаточно? 'scanner.h' и' scanner.cpp' есть? – einstein

+0

добавить 'scanner.cpp' и' #include "scanner.h" 'в scanner.cpp – edwardramsey

ответ

1

Вариант 1: Добавить scanner.cpp в командной строке

clang++ -O3 -std=c++11 -stdlib=libc++ -I./includes/ -I./compiler/ compiler/program.cpp compiler/scanner.cpp -o hej 

Вариант 2: Отдельные этапы компиляции из стадии ссылка

clang++ -c -O3 -std=c++11 -stdlib=libc++ -I./includes/ -I./compiler/ compiler/program.cpp -o compiler/program.o 
clang++ -c -O3 -std=c++11 -stdlib=libc++ -I./includes/ -I./compiler/ compiler/scanner.cpp -o compiler/scanner.o 
clang++ -O3 -std=c++11 -stdlib=libc++ compiler/program.o compiler/scanner.o -o hej 

Вариант 3: использовать Makefile

Содержание Makefile:

CXX=clang++ 
CXXFLAGS= -O3 -std=c++11 -stdlib=libc++ -Wall -I./includes/ -I./compiler/ 

hej: compiler/program.o compiler/scanner.o 
    clang++ -O3 -std=c++11 -stdlib=libc++ -o [email protected] $^ 

Затем просто запустите:

make 
Смежные вопросы