Linux头文件和库文件路径问题

xhuacmer 2010-07-02 11:08:40
我是刚从windows vc环境转到Linux进行开发,有一个很基本的问题还有疑问,麻烦各位帮我解答一下哈!
比如 gcc -o fred -I/usr/openwin/include/ fred.c
gcc -o fred fred.c -L/usr/lib/ libm.a

这两句编译命令有什么区别? 主要是-I,-L选项的区别。如果我的头文件放在另一个目录下(如usr/openwin/hh),库文件也放在另一个目录下(如/usr/lib)应该怎么做? 随便给我解释一下Linux下库文件是什么概念,是已经编译成目标文件的集合吗?
谢谢!!
...全文
323 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhuacmer 2010-07-02
  • 打赏
  • 举报
回复
谢谢各位的回答!分我就随便分配哈
ericming200409 2010-07-02
  • 打赏
  • 举报
回复
库文件和windows的概念都是一样的拉,分为动态链接库和静态库
mao_pu_hua 2010-07-02
  • 打赏
  • 举报
回复
-I指向头文件的目录,-L指向库文件目录。
-Iusr/openwin/hh -L/usr/lib -lm 这个库文件不需要前面的lib和后面的.a
.a是静态链接库
bluejays 2010-07-02
  • 打赏
  • 举报
回复
随便给我解释一下Linux下库文件是什么概念,是已经编译成目标文件的集合吗?
差不多就是这样吧。

比如,如果代码里面用到了pthread_系列的函数,编译的时候就要-lpthread,指定链接库文件libpthread.a,那里面就是pthread_系列函数预先编译好的目标码。
pottichu 2010-07-02
  • 打赏
  • 举报
回复
-I 是包含头文件的目录
-L 是包含库文件的目录

linux 下的 .so 跟 windows 下的 dll 概念差不多,都是动态连接的意思。
.a 文件是静态库。
bluejays 2010-07-02
  • 打赏
  • 举报
回复
gcc -o fred -I/usr/openwin/hh -L/usr/lib fred.c
yzx714 2010-07-02
  • 打赏
  • 举报
回复
这些都可以Google到
abcdef0966 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xhuacmer 的回复:]
难道就不能像windows下面一样 同一个项目就把头文件和源文件放在同一目录 Linux为什么要把头文件放在别处呢(如/usr/openwin/include)??
[/Quote]

觉得分开放还更好哦,不过在linux下一样可以放在一起啊。分开放更清晰吧
lybhzhl2009 2010-07-02
  • 打赏
  • 举报
回复
3楼的解释的很清楚了哦。
xhuacmer 2010-07-02
  • 打赏
  • 举报
回复
原来这样 都差不多 差不多
zhjl1314 2010-07-02
  • 打赏
  • 举报
回复
你说的是公共头文件吗?
windows下面也一样吧 ...

如果说是私人的头文件
那是一种习惯
在项目中你的头文件也许别人会用到
放到公共目录下面比较方便别人找到
Dobzhansky 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xhuacmer 的回复:]

难道就不能像windows下面一样 同一个项目就把头文件和源文件放在同一目录 Linux为什么要把头文件放在别处呢(如/usr/openwin/include)??
[/Quote]如果你先学习 unix, 后学 windows, 问题就会反过来了, 没事的, 适应一下就好了.
xhuacmer 2010-07-02
  • 打赏
  • 举报
回复
难道就不能像windows下面一样 同一个项目就把头文件和源文件放在同一目录 Linux为什么要把头文件放在别处呢(如/usr/openwin/include)??
make是在1977年在贝尔实验室(Bell Labs)研发的 Unix系统中的一款依赖关系检查工具程序(Utility software)。make的应用非常广泛,它被用来构建 C、C++ 、Pascal  Fortran 等项目,自动化构建生成可执行文件或者文件。make通过读取Makefile文件以自动化建构软件, 它会根据依赖文件的修改时间进行判断。确定一个target的依赖关系,然后把生成这个target的相关命令传给shell去执行。GNU make 和大多数版本的 make 之间最重要的区别是 GNU make 是自由软件,常和GNU编译系统一起被使用,是大多数GNU Linux安装的一部分。GNU make 在 makefile 中具有许多强大的功能,超出了其他 make 版本的功能,它还可以重新生成、使用、然后删除不需要保存的中间文件。GNU make 还有一些非常方便的简单功能。例如,选项“假装源文件文件没有更改,即使它已更改。当您向文件添加新宏时,这非常有用。大多数版本的 make 都会假设它们必须重新编译所有使用文件的源文件,但是如果您知道对文件的更改不需要重新编译 GNU make 为您提供了一种避免重新编译的方法-o file 。 黄强老师针对零编程基础的同学,精心打磨make核心知识点,帮助你快速掌握Linux编程中的make的构建!适用人群: 零基础、新手、想快速学习Linux下C、C++编程的童鞋!

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧