我要编译一个多文件C ++程序,并出现以下错误;
Undefined symbols for architecture i386:
"included::printMSG()", referenced from:
_main in ccQwMj1l.o
ld: symbol(s) not[Finished in 0.3s with exit code 1] found for architecture i386
collect2: ld returned 1 exit status
我的代码: main.cpp:https://gist.github.com/3845822
included.cpp:https://gist.github.com/3845825
included.h:https://gist.github.com/3845827
(已确认可与g++
合作)
编辑:我没有把这些文件放在一个项目中,它们只是在同一个文件夹中,我正在编译main.cpp
答案 0 :(得分:1)
您不能只编译单个文件,并希望所有其他文件自动链接到它以创建最终程序。
实现这一目标的一种方法是使用名为make
的程序,该程序读取具有Makefile
遵循规则的make
。
一个简单的Makefile
可能如下所示:
CXXFLAGS = -Wall -g
my_pogram: main.o other_file.o third_file.o
g++ main.o other_file.o third_file.o -o my_program
main.o: main.cpp
g++ $(CXXFLAGS) -c -o main.o main.cpp
other_file.o: other_file.cpp
g++ $(CXXFLAGS) -c -o other_file.o other_file.cpp
third_file.o: third_file.cpp
g++ $(CXXFLAGS) -c -o third_file.o third_file.cpp
还有其他类似的程序来处理这个问题。一个受欢迎的是CMake。