如何让我的C ++程序在Unix上编译?

时间:2012-04-28 20:42:39

标签: c++ linux unix g++

我正在用C ++开展一个学校项目,正在使用我们的学校unix服务器按照教授的指示编写它。我正在使用vim和g ++进行编译。

这个项目是基于另一个项目Lab0构建的,在TA的一些帮助下我没有遇到任何麻烦,但是不得不做一些奇怪的事情来构建它(#include LinkedSortedList.cpp文件位于底部LinkedSortedList.h)。班上的每个人都用#include .cpp文件做了这个奇怪的事情。

首先,这里是文件以及他们为Lab0编写的#include正常的#include:

(帖子没有在我的makefile中显示我的标签,但它们在那里!)

生成文件:

main: *.cpp *.h

g++ -o LSL main.cpp

clean:

rm -f *.o LSL*

Lab0(构建的那个),就像这样:

文件:

main.cpp(未模板化):

#include "LinkedSortedList.h"
#include <iostream>
using namespace std;

SortedList.h(模板化):     没有

LinkedNode.h(模板化):

#include <iostream>
using namespace std;

LinkedSortedList.h(模板化):

#include "SortedList.h"
#include "LinkedNode.h"
#include <iostream>
using namespace std;

#include "LinkedSortedList.cpp" // At the bottom fo this file above the #endif to get the program to compile from what the TA told me to do for lab0 due to the templated class.

LinkedSortedList.cpp(模板化):     没有

构建和运行此项目没有问题。

这是我的问题:

下面是lab1,我遇到问题,Lab1使用Lab0中的所有文件只添加了Employee.h和Employee.cpp。

Lab1(不会构建的那个)是这样的:

文件:

lab1.cpp:

#include <iomanip>
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <stdexcept>
#include "Employee.h"
#include "LinkedSortedList.h"

SortedList.h(模板化):     没有

LinkedNode.h(模板化):

#include <iostream>
using namespace std;

LinkedSortedList.h(模板化):

#include "SortedList.h"
#include "LinkedNode.h"
#include "Employee.h"
#include <iostream>
using namespace std;

#include "LinkedSortedList.cpp" // At the bottom fo this file above the #endif to get the program to compile from what the TA told me to do for lab0 due to the templated class.

LinkedSortedList.cpp(模板化):     没有

Employee.h(未模板化):

#include <iostream>
#include <sstream>
using namespace std;

Employee.cpp(未模板化):

#include <stdio.h>
#include <string.h>

(帖子没有在我的makefile中显示我的标签,但它们在那里!)

makefile:

main: *.cpp *.h

g++ -o LSL lab1.cpp

clean:

rm -f *.o LSL*

我得到的错误:

以下是我遇到的错误。似乎没有看到Employee.cpp / Employee.h文件。任何想法??

unixserver:Lab1> make g++ -o LSL lab1.cpp /tmp/ccamnaqx.o: In function createRecord()': lab1.cpp:(.text+0x3fb): undefined reference toEmployee::Employee()' lab1.cpp:(.text+0x477): undefined reference to Employee::setLastName(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)' lab1.cpp:(.text+0x4f2): undefined reference toEmployee::setFirstName(std::basic_string, std::allocator >)' lab1.cpp:(.text+0x589): undefined reference to Employee::setId(int)' lab1.cpp:(.text+0x5ce): undefined reference toEmployee::setSalary(int)' lab1.cpp:(.text+0x60e): undefined reference to Employee::setDepartment(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)' lab1.cpp:(.text+0x67c): undefined reference toEmployee::setPhoneNumber(std::basic_string, std::allocator >)' lab1.cpp:(.text+0x6ea): undefined reference to Employee::setAddress(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)' lab1.cpp:(.text+0x758): undefined reference toEmployee::setHireDate(std::basic_string, std::allocator >)' lab1.cpp:(.text+0x7c6): undefined reference to `Employee::setEmailAddress(std::basic_string, std::allocator >)' collect2: ld returned 1 exit status make: * [main] Error 1

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

您必须编译Employee.cpp并将其链接到可执行文件:

g++ -o LSL lab1.cpp Employee.cpp

LinkedSortedList.cpp可能也是如此(我的目的并不完全清楚)。

答案 1 :(得分:3)

您的第二个项目的makefile只编译lab1.cpp而不是其他cpp文件。您还需要考虑其他两个(Employee.cpp和LinkSortedList.cpp)。

此外,请在此网站上了解如何正确格式化代码。 https://stackoverflow.com/editing-help