linux c++ 自定义头文件编译错误找不到函数

/*function.h*/
double f(double x);

/*function.cpp*/

#include "function.h"
double f(double x)
{
return x;
}

/*main.cpp*/
#include<iostream>
#include<math.h>
#include"./function.h"

using namespace std;
int main()
{
cout<<f(2.0)<<endl;
return 0;
}

编译使用
g++ main.cpp -o test
编译错误
undefined reference to 'f(double)'
但如果使用
g++ main.cpp function.cpp -o test
为什么?

第1个回答  2013-05-31
链接要f函数, 前面的没有编译function.cpp文件追问

所以每次都要把头文件的实现文件编译下?那如果很多的话,岂不是很麻烦?

追答

多了用makefile

本回答被提问者采纳

c语言给了头文件printf没有定义不能识别怎么解决求大
首先,在Linux环境中使用GCC编译C代码时,如果出现函数未定义的错误,可以尝试以下步骤解决:1. 检查头文件路径:确保包含的头文件路径正确无误。在代码中使用`#include`命令引入头文件。例如,`#include `用于引入标准输入输出函数库。2. 检查依赖库:函数未定义的错误可能源于缺失的依赖库。在GCC编译命令...

周立功USBCAN-II+在Linux使用用c++编编译为什么会提示库函数找不到?
就排查了库以及驱动的问题,而最有可能是因为他们的controlcan.h中导出的是C接口,C++调用时在controlcan.h中所有函数前面加一个extern "C"就可以了。

C++编译失败报错很奇怪,没说错误在哪儿,怎么解决?源代码和报错信息如下...
这个是linux下面的c++编译对吗,它跟挂载属性inode64有关系。比较老的交叉编译器,只支持32位inode的文件访问,当遇到超过4294967295的文件,就会编译出错并提示:Value too large for defined data type。那么解决方案就有两种:Ø 升级交叉编译器版本,让其支持inode64的源文件。Ø 交叉编译...

linux中C++编译提示找不到iostream文件
1、将boost_1_47_0.zip解压缩,放置于D盘。2、 开始 -> 所有程序 -> Microsoft Visual Studio 2008 -> Visual Studio Tools -> Visual Studio 2008 Command Prompt。3、在命令行(可以使用鼠标右键复制粘贴的)中输入: cd D:\\boost_1_47_0 ,此时切换到D:\\boost_1_47_0这个目录下面。4、...

Linux下用g++编译c程序出错。。
我用一个例子来告诉你怎么样在 C++ 里使用C的头文件\/函数。比方说我有一个C的头文件叫 c.h, C的源码文件叫 c.c,内容分别是 c.h:ifndef _ASDFD_INCLUDED_define _ASDFD_INCLUDED_include <stdio.h> extern int test(int a);endif c.c:include "c.h"int test(int a){ printf("A = ...

C++在linux下G++编译报错“no matching function for call to ‘*...
代码号乱,好像不完整,初步分析如下:bool CBindVariableList::CopyToExtVarList(OCIError *pErr){ return ForEachItem(COraBindVariable::CopyToExtVar(),pErr);\/\/这里,CopyToExtVar函数的返回值,是一个bool类型,作为第一个参数传递进入ForEachItem函数 } 但是,bool CBindVariableList::ForEach...

linux中C++编译提示找不到iostream文件
一、打开boost_1_47_0.zip并将其放在磁盘D上。二、 开始 -> 所有程序 -> Microsoft Visual Studio 2008 -> Visual Studio Tools -> Visual Studio 2008 Command Prompt。三、在可以使用鼠标右键复制和粘贴的命令行上,输入: cd D:\\boost_1_47_0 ,此时切换到D:\\boost_1_47_0这个目录下面...

JNA 调用c++函数的出错,java能加载库,但是找不到c++写的函数
调用C++编译的代码能调用到库但是找不到函数,应该是因为C++编译器会破坏函数的名称。对此,一般网上能查到两种方法解决:用extern C ,功能是将部分代码用C编译器进行编译,因为 C编译器不会改变函数的函数名,Java中就可以用代码中的函数名调用了。用def模板 注1:这里说的方法你需要自己去查一下,...

linux中C++编译提示找不到iostream文件
iostream是C++的头文件,不是C的,你编写的程序也是C++的 你把他改成#include 就好了,C++现在已经舍弃头文件里的h了,所以不认iostream.h

我是linux菜鸟,Linux的下的C\/C++如何调试呢?只能编译之后看错误信息么...
linux下调试用GDB啊,强大的调试工具,可以完胜vc vb等集成开发环境的调试功能。gdb可以完成 (1)设置断点 (2)监视程序变量的值 (3)程序单步执行 (4)修改变量的值等等功能。为了使用GDB调试,在编译源文件的时候必须使用 -g 选项加上调试信息 用法网上有很多,您可以找一找 ...

相似回答