linux下编写c++,include的那些头文件在啥地方

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下编写c++,include的那些头文件在啥地方相关的知识,希望对你有一定的参考价值。

在linux下有众多的文件,而编写c++时经常要include一些头文件,那这些头文件是放在哪个文件夹下的 麻烦说的详细点,包括那些标准c++的头文件,以及非标准的 还有如果我有一些自己编好的,或是下载到的头文件,想以后编写时能直接include,那我这些文件应... 想以后编写时能直接include,包括那些标准c++的头文件,或是下载到的头文件,而编写c++时经常要include一些头文件在linux下有众多的文件,那这些头文件是放在哪个文件夹下的 麻烦说的详细点,以及非标准的 还有如果我有一些自己编好的 展开 usr//这些我也知道的,但是这个文件夹下还是有很多的文件和文件夹的;include/

参考技术A C/C++程序在linux下被编译和连接时,GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径。自己指定的路径就不说了,这里说明一下系统自动搜索的路径。
【1】include头文件路径
除了默认的/usr/include,
/usr/local/include等include路径外,还可以通过设置环境变量来添加系统include的路径:
#
C
export
C_INCLUDE_PATH=XXXX:$C_INCLUDE_PATH
#
CPP
export
CPLUS_INCLUDE_PATH=XXX:$CPLUS_INCLUDE_PATH
以上修改可以直接命令行输入(一次性),可以在/etc/profile中完成(对所有用户生效),也可以在用户home目录下的.bashrc或.bash_profile中添加(针对某个用户生效),修改完后重新登录即生效。
【2】link链接库文件路径
链接库文件在连接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的(也可以在编译命令中通过
-l
-L
来指定,这里讲的是使用系统默认搜索路径)。
一般
Linux
系统把
/lib
/usr/lib
/usr/local/lib
作为默认的库搜索路径,所以使用这几个目录中的链接库文件可直接被搜索到(不需要专门指定链接库路径)。对于默认搜索路径之外的库,则需要将其所在路径添加到gcc/g++的搜索路径之中。
链接库文件的搜索路径指定有两种方式:1)修改/etc/so.ld.conf
2)修改环境变量,在其中添加自己的路径
1)在环境变量中添加
动态链接库搜索路径:
export
LD_LIBRARY_PATH=XXX:$LD_LIBRARY_PATH
静态链接库搜索路径:
export
LIBRARY_PATH=XXX:$LIBRARY_PATH
以上修改可以直接命令行输入(一次性),可以在/etc/profile中完成(对所有用户生效),也可以在用户home目录下的.bashrc或.bash_profile中添加(针对某个用户生效),修改完后重新登录即生效。
2)在/etc/ld.so.conf
中添加指定的链接库搜索路径(需要root权限),然后运行
/sbin/ldconfig,以达到刷新
/etc/ld.so.cache的效果。
以上两种方式均可以达到指定链接库搜索路径的效果。

Linux下编写c语言头文件,编译时出现“函数未定义”

//test.h
#ifndef __TEST_H__
#define __TESH_H__
void print();
#endif

//test.c
#include<stdio.h>
#include"test.h"
void print()

printf("this is ja test\n");


//main.c
#include"test.h"
int main()

print();
return 0;


执行gcc -o main main.c
报错:
/tmp/ccPyIgfz.o: In function `main':
main.c:(.text+0xa): undefined reference to `print'
collect2: ld 返回 1

出现该错误的原因为编译时只变编译了源文件的一部分,故在链接时无法从编译好的目标代码中找到print函数,所以出错。


根据你的源文件结构,个人推荐先单独编译源文件为多个object文件,再统一链接。

方法如下

gcc -c main.c # -c参数的作用是让gcc只编译,不链接
gcc -c test.c
gcc -o main main.o test.o # 将编译好的目标代码链接

当然,以上是在gcc为编译器的前提下执行,如使用clang等其他编译器,方法类似(clang的调用方法与gcc高度兼容)

参考技术A 编译的命令错了,要么写成makefile,要么就按照第一个回答的同学那么写。 参考技术B 你把test.c 和 main.c 的代码合在一块吧,那样就OK 了。 参考技术C gcc -o main main.c test.c本回答被提问者采纳

以上是关于linux下编写c++,include的那些头文件在啥地方的主要内容,如果未能解决你的问题,请参考以下文章

Linux下编写c语言头文件,编译时出现“函数未定义”

如何在linux/ubuntu下编写c++网络通信代码

在不使用 matlab 头文件和库的情况下编写 MAT 文件

是否可以在没有包含保护且没有多个定义错误的情况下编写头文件?

linux下编写并运行python和C++程序

在linux下编译C,用GCC,#include 需要 "FILENAME" 或 <FILENAME>是怎么回事?