g头文件编译
Ⅰ g++编译,总是提示头文件fstream错误
ifstream infile(filename.c_str(),ios::in)这句有问题
文件名是不是连文件后缀一起加上了还有文件路径等。建议你打断点调试一下
Ⅱ 关于在linux下用gcc编译头文件的问题。
我用一个例子来告诉你怎么样在 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 = %d\n", a);
return a*a;
}
现在我想在c++中使用c.c中提供的函数test(),我的c++文件名字叫 a.cpp,那么里面跟C有关的部分就要用 extern "C" {} 大括号括起来,看看我的
a.cpp:
#include <iostream>
using namespace std;
extern "C"
{
#include "c.h"
}
int main()
{
int b = 12;
b = test(b);
cout<<"b = "<<b<<endl;
return 0;
}
看到了吧,#include "c.h" 被 extern "C" {}括起来了。
然后是如何编译,先把C文件编出目标文件(.o)来
gcc -c c.c
你会看到生成了 c.o,其实,有目标文件就够了,如果你一定要做成(静态/动态)库文件,也是可以的,不过我这里就不深入了,做成库和直接用目标文件对解决你的问题没有任何区别。
然后再编译C++文件,也就是我的 a.cpp
g++ -o hello a.cpp c.o
看到了吧,我在编译 a.cpp 的时候把C生成的 c.o也加上了。 然后生成 可执行的 hello, 运行
./hello
就可以看到
A = 12
b = 144
关于创建静态库,假定你有3个C文件, a.c, b.c, c.c 提供了你C++要用到的接口,那么可以把这三个C文件编译出来的目标文件放到一个库文件里供C++使用,方法为
先编译出目标文件
gcc -c a.c b.c c.c
这时候你应该看到有 a.o b.o c.o了
然后创建库文件
ar cr libtest.a a.o b.o c.o
这三个目标文件就放入 libtest.a 这个静态库中了,然后编译C++程序 (你的C++程序应该已经按照我前面说的用 extern "C" 把C的接口都括起来了),假定你的 libtest.a 放在 /home/aaa/lib下
g++ -o my.exe my.cpp -L/home/aaa/lib -ltest
就会生成可执行文件 my.exe了。
Ⅲ 请问如何用GCC编译自己定义的头文件谢谢。
gcc -o main /home/mike/main.cpp -I /home/mike/
Ⅳ GCC的编译时,头文件怎么放呢。需要制作makefile吗
对于这种小程序,不需要单独放。全部放在一起就可以了。
Ⅳ g++ 连头文件一起编译怎么弄啊菜鸟一枚,求指教。
连头文件一起编译?
头文件需要编译
?
头文件是不要编译的,只是在预编译的时候加入cpp中
-I$路径
这个只是指定路径,查找头文件,加入cpp中
当然如果是自己写得头文件,只要在当前目录下,就不需要手动添加了
Ⅵ c语言中如何编译头文件啊
只要在程序开头加入#include<头文件名>,在编译过程当中,头文件自动会被添加到源文件当中一起进行编译。
编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。
C源程序头文件-->预编译处理(cpp)-->编译程序本身-->优化程序-->汇编程序-->链接程序-->可执行文件。
Ⅶ 用G++编译时老报一些找不到头文件的错,但GCC就没有
通常找不到指定函数不是因为编译参数问题。而是你
g.cpp
中在include
f.h的时候没有使用:
extern
"C"
{
#include"f.h"
}
因为C语言和cpp的编译过程中的函数名称修饰规则是不一样的。当cpp引用C库的时候必须告诉
编译器
,哪些函数是
C函数
Ⅷ gcc编译器头文件处理
两次相对比一下,第二次增加了以下函数的实现,这部分是要编译成机器指令的,所以第二次这部分相当于是增加的。
intprintf(constchar*__format,...)
{
registerint__retval;
__builtin_va_list__local_argv;__builtin_va_start(__local_argv,__format);
__retval=__mingw_vprintf(__format,__local_argv);
__builtin_va_end(__local_argv);
return__retval;
}
那第二次减少了哪些呢?一点都没有,因为stdio这个头文件声明的函数和变量,都是在一个库中实现的,根本就不会包含在你的exe中,所以加不加stdio头文件没有区别。
要想验证这个也很简单:代码1
#include<stdio.h>
intmain(){return0;}
代码2:
intmain(){return0;}
比较这两次产生的exe是否一致即可。
注意,不能带有-g选项,-g选项会生成一些额外的调试信息
Ⅸ g++ 如何编译含头文件的程序要详细
假设file.h是头文件, file.cpp是实现文件, 在prog.cpp里包含了file.h, 可以这样编译:
g++ -c prog.cpp ##这里会生成prog.o
g++ -c file.cpp ##生成file.o
g++ prog.o file.o -o prog ##prog是可执行文件
也可以直接晕样:
g++ prog.cpp file.cpp -o prog
Ⅹ 怎样编译和配置GStreamer
GStreamer无疑是一个美观的设计,但初学者往往觉得结构复杂,难以掌握。编译起来也很麻烦:) 本文列出了编译和配置GStreamer的主要步骤,给需要的人提供一个参考。 像其它的Linux开源项目一样,GStreamer也是采用包括autoconf,automake在内的GNU build system来编译的。而且,GStreamer在编译和安装时还要依赖于其它的库,这些库至少包括:pkg-configGLiblibxml2 liboil 这些库都使用pkg-config来提供include路径和library路径等编译信息,而不是像很多开源项目一样在执行configure脚本的时候用CPPFLAGS/CFLAGS环境变量来指定。 这些库很容易通过google找到,一般以“*.tar.gz”或“*.tar.bz2”压缩文件的形式存在。使用tar命令解压:tar xzf *.tar.gz或tar xjf *.tar.bz2 解压后一般会生成一个源文件目录,先面的命令都要进入到各个库的源文件目录内执行。 具体编译和安装步骤如下: (1)确定各个库的安装路径。为描述方便,假设如下的安装路径:pkg-config: /usr/local/install-pkg-config/Glib: /usr/local/install-glib/libxml2: /usr/local/install-libxml2/liboil: /usr/local/install-liboil/GStreamer Core: /usr/local/install-gstcore/GStreamer Base Plugins: /usr/local/install-plugins-base/ (2)设置环境变量。下面的命令按bshell/bash的语法,cshell中应该用setenv。 export PATH=/usr/local/install-pkg-config/bin:$PATH export PKG_CONFIG_PATH="/usr/local/install-glib/lib/pkgconfig:/usr/local/install-libxml2/lib/pkgconfig:/usr/local/install-liboil/lib/pkgconfig:/usr/local/install-gstcore/lib/pkgconfig:/usr/local/install-plugins-base/lib/pkgconfig" 第一个命令是将pkg-config这个工具加入到PATH变量中,这样在执行configure脚本时就能够调到刚刚安装好的pkg-config。 第二个命令是设置pkg-config的搜索路径,在执行configure脚本时会调用pkg-config得到所依赖的头文件和库。 (3)编译和安装pkg-config。 ./configure --prefix=/usr/local/install-pkg-configmakemake install 执行configure脚本时用--prefix指定安装路径 (4)编译和安装GLib。 ./configure --prefix=/usr/local/install-glibmakerm -rf /usr/local/install-glib/include/glib.h /usr/local/install-glib/include/gmole.h make install (5)编译和安装libxml2。 ./configure --prefix=/usr/local/install-libxml2makemake install (6)编译和安装liboil。 ./configure --prefix/usr/local/install-liboilmakemake install (7)编译和安装GStreamer Core。 ./configure --prefix=/usr/local/install-gstcoremakemake check (optional) make install (8)编译和安装GStreamer Base Plugins。 ./configure --prefix=/usr/local/install-plugins-basemakemake check (optional) make install (9)编译和安装GStreamer的其它plugins,包括gst-plugins-good,gst-plugins-bad等。可选。与编译安装gst-plugins-base类似。 (10)设置运行环境。要运行GStreamer,需要设置GST_PLUGIN_PATH环境变量,指明GStreamer Core和Plugins的库路径。 export GST_PLUGIN_PATH="=/usr/local/gst/install-gstcore/lib:=/usr/local/install-plugins-base/lib" 如果还安装了其它plugins,也要加到GST_PLUGIN_PATH路径里。 另外,如果已有的tool chain版本不够,还需要更新tool chain。常需要做的是安装新版本的autoconf和automake。