关于在linux编译的问题

hjd1399 2010-03-11 05:44:41
要编译a.cpp文件`,这个文件需要用f.so文件


LInux中编译
在a.make文件中 ”LINKLIB =“ 什么也没有指定,
make -f a.make 时没有出错,他需要的f.so文件并没有引用,并且这个文件也不存在,为什么没有出错

windows中编译
在windows的VS2008中没有引用f.lib的话会有error LNK2019的错误,

难道LInux中当没有引用f.so文件时,可以忽略吗?
...全文
178 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjd1399 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wuyu1998 的回复:]
不要用windows是思维方式,去思考unix/linux的工作方式。

unix/linux的思想,一个命令只干一件事,但要干好。
因此,在unix/linux中,几乎所有的程序都需要使用到其它程序的功能。

gcc在编译时,用-I命令去指定头文件的路径,-L命令指定库文件的路径,-l命令指定程序需要的库文件。
f.so文件,是一个动态链接库文件。因此,需要用-l和-L命令去指定它。……
[/Quote]

为什么没有-L去指定它,还不报错
nevil 2010-03-15
  • 打赏
  • 举报
回复
.so文件在linux下其实是共享库(shared object),其加载方式有两种,动态加载和链接时静态加态.

动态加载是在代码中通过dlopen,dlsym来调用库中的函数, 不需要链接时-l来指定该共享库(不过需要-ldl)

静态加载则是在链接过程中将.so库中的内容链接到新的对象文件中,需要在链接时用-l来指定该共享库,这种方式类型于静态库链接,只是在内存中这个共享库只有一份拷贝, 所有使用这个动态库的程序共享这份拷贝.
ecsape 2010-03-15
  • 打赏
  • 举报
回复
我还以为这个问题解决了呢。
在你的工程所有源文件里搜索下有没有用过一个函数 dlopen,如果有,编译时不需要-L或-llib。
请看我7楼的回复,在网上搜索下相关内容,你就知道为什么不需要在编译时候加动态库选项了。
ecsape 2010-03-12
  • 打赏
  • 举报
回复
猜测LZ的程序是用的动态载入数据库,这种方式在编译时不需要-llib,但使用的时候需要.so文件。
如果用的是静态载入数据库,编译的时候就需要-llib了。
LZ编译的程序是自己写的还是别人的?如果是自己写的,应该不会问这个问题,个人感觉,哈哈。
brookmill 2010-03-12
  • 打赏
  • 举报
回复
f.so文件是动态链接。应该是说:编译的时候不链接,运行的时候才链接。

拿f.so文件和windows的f.lib对比不太恰当。
linux的.a,windows的.lib是静态库。
linux的.so,windows的.dll是动态库。
qihuanfengyun 2010-03-12
  • 打赏
  • 举报
回复
这不是主要问题吧。我在编译东西的时候,如果不指定“-L./ -lXXX”就会报找不到的错误。

还有楼主说的“LINKLIB =”这环境变量具体在Makefile中怎么工作的啊!!!

能不能指点一下啊???
TillPerfect 2010-03-12
  • 打赏
  • 举报
回复
一楼晚睡,二楼也不早啊。。。
hjd1399 2010-03-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 brookmill 的回复:]
f.so文件是动态链接。应该是说:编译的时候不链接,运行的时候才链接。

拿f.so文件和windows的f.lib对比不太恰当。
linux的.a,windows的.lib是静态库。
linux的.so,windows的.dll是动态库。

[/Quote]

那如果LInux下编译的时候要是用其他工程里面的东西的时候怎么办。
肯定是要参考的
wuyu1998 2010-03-12
  • 打赏
  • 举报
回复
不要用windows是思维方式,去思考unix/linux的工作方式。

unix/linux的思想,一个命令只干一件事,但要干好。
因此,在unix/linux中,几乎所有的程序都需要使用到其它程序的功能。

gcc在编译时,用-I命令去指定头文件的路径,-L命令指定库文件的路径,-l命令指定程序需要的库文件。
f.so文件,是一个动态链接库文件。因此,需要用-l和-L命令去指定它。
brookmill 2010-03-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lgxwqq111 的回复:]
ls说的有道理。而且ls每天都这么晚睡
[/Quote]
前三十年睡不醒,后三十年睡不着 :)

其实我也不懂.so库,刚才简单学习了一下。
1. http://blog.csdn.net/chenqiang35/archive/2008/10/15/3080482.aspx
2. http://blog.csdn.net/comlc/archive/2009/05/08/4162095.aspx
freetstar 2010-03-12
  • 打赏
  • 举报
回复
ls说的有道理。而且ls每天都这么晚睡

23,121

社区成员

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

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