1

我要编译一个多文件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

包含的.cpp:https ://gist.github.com/3845825

包括.h:https ://gist.github.com/3845827

(确认与 合作g++

编辑:我没有把这些文件放在一个项目中,它们都在同一个文件夹中,我正在编译main.cpp

4

1 回答 1

1

您不能只编译单个文件并希望所有其他文件都自动链接到它以创建最终程序。

实现这一点的一种方法是使用一个名为 的程序make,该程序读取Makefile具有以下规则的makea 。

一个简单的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

于 2012-10-06T19:47:10.750 回答