社区
Linux/Unix社区
帖子详情
关于在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
打赏
收藏
关于在linux编译的问题
要编译a.cpp文件`,这个文件需要用f.so文件 LInux中编译 在a.make文件中 ”LINKLIB =“ 什么也没有指定, make -f a.make 时没有出错,他需要的f.so文件并没有引用,并且这个文件也不存在,为什么没有出错 windows中编译 在windows的VS2008中没有引用f.lib的话会有error LNK2019的错误, 难道LInux中当没有引用f.so文件时,可以忽略吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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每天都这么晚睡
Android反
编译
工具包(升级)官方绿色版
Android反
编译
工具包,内含图形和命令两种反
编译
方式,命令支持windows和
linux
平台,亲测验证成功!详见博客:Android APK反
编译
详解(附图) http://blog.csdn.net/sunboy_2050/article/details/6727581
jdk1.7 64位官方正式版 jdk-7u76-
linux
-x64.tar.gz
jdk-7u76-
linux
-x64.tar.gz,
编译
android5.0或以上需要
学会在
Linux
上
编译
调试C++项目
本课程主要针对没有或者很少写过
linux
上C++程序的同学, 本课程会教你如何从0基础开始,安装配置ubuntu虚拟机、使用GCC
编译
普通程序、动态库、静态库,编写复杂项目配置文件makefile,使用GDB工具调试C++程序。
Linux
里
编译
命令,
linux
编译
命令大全
linux
下
编译
不同程序用到的命令也是不同,
编译
程序的命令不在少数,下面由学习啦小编为大家整理了
linux
编译
命令大全的相关知识,希望大家喜欢!
linux
编译
命令大全1.gcc假设源程序文件名为test.c。1. 无选项
编译
链接...
在
linux
编译
c++,在
linux
下如何
编译
C++程序
一、GCC(GNU Compiler Collection)是
linux
下最主要的
编译
工具,GCC不仅功能非常强大,结构也异常灵活。它可以通过不同的前端模块来支持各种语言,如Java、Fortran、Pascal、Modula-3和Adag++是GCC中的一个工具,专门...
Linux/Unix社区
23,121
社区成员
74,506
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章