链接g++中的文件
Linking files in g++
最近我尝试用g++(在Ubuntu上(编译一个程序。通常我使用Dev-C++(在Windows上(,只要我制作一个项目并将所有必要的文件放在那里,它就可以很好地工作。
编译程序时发生的错误是:
$filename.cpp: undefined reference to '[Class]::[Class Member Function]'
使用的文件如下:
带有主函数的源代码(.cpp(文件。
带有函数原型的头文件。
.cpp文件,其中包含每个函数的定义
任何帮助都将不胜感激。
您可能试图编译和链接,而不是仅仅编译源文件,或者不知何故忘记了什么。
变体一(所有内容都在一行中;始终重新编译所有内容(:
g++ -o myexecutable first.cpp second.cpp third.cpp [other dependencies, e.g. -Lboost, -LGL, -LSDL, etc.]
变体二(循序渐进;如果没有提供-o
,gcc将重用输入文件名,并且在不链接时只更改扩展名;此变体最适合用于makefiles;允许您跳过未更改的部分(:
g++ -c first.cpp
g++ -c second.cpp
g++ -c third.cpp
g++ -o myexecutable first.o second.o third.o [other dependencies]
变体三(一些占位符(:
不会列出它,但上面提到的参数也可以使用占位符,例如g++ -c *.cpp
会将当前目录中的所有cpp文件编译为同名的o(object(文件。
总的来说,你不应该太担心它,除非你真的必须在没有任何IDE的情况下工作。如果您对命令行语法不太精通,请先使用IDE。
gcc的命令行应该看起来像:
g++ -o myprogram class1.cpp class2.cpp class3.cpp main.cpp
检查在哪个cpp文件中定义了缺少的类成员函数。你可能没有把它交给gcc。
您还可以在filename.cpp
中检查正确的#include
标记。假设filename.cpp
使用与filename.cpp
位于同一目录中的myclass.h
中包含的代码。假设g++所说的未定义类包含在myclass.h
中,并在myclass.cpp
中定义。因此,要将myclass.h
正确地包含在filename.cpp
中,请执行以下操作:
- 在
filename.cpp
中:
#include <iostream>
#include <myclass.h>
//..source code.
- 在生成文件中:
filename.o: myclass.C myclass.h filename.cpp
g++ -I./ -c filename.cpp -o filename.o
myclass.o: myclass.C myclass.h
g++ -c myclass.C -o myclass.o
在上文中,请注意在编译filename.cpp
时使用-I.
选项。CCD_ 15请求CCD_ 16将CCD_ 17部分之后的路径包括在搜索路径中。这样CCD_ 18就被正确地包括在内。
在缺乏更多信息(可能是来源(的情况下,很难准确地说出问题所在。所有的尝试都将是暗箭伤人。
我假设您已经声明了一个成员函数(通常在.h
或.hpp
文件中(,但已经提交了成员函数的相应定义(通常在.cpp
文件中(。
在c++中,可以声明这样的类:
class foo {
void x();
void y();
}
带有一个类似的cpp文件
void foo::x() {
do_something()
}
注意,没有foo::y()
。
只要成员函数foo::y()
在整个编译代码中不被引用,这就不会给编译/链接过程带来问题。
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到