社区
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文件时,可以忽略吗?
...全文
224
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每天都这么晚睡
linux
sqlite 安装
编译
问题
1. 安装从官网下载安装就行 到安装目录下输入以下 ./configure make sudo make install 生成 sqlite3.c sqlite3.h 等文件 2. 新建数据库 sqlite3 test.db 3. 写测试程序把sqlite3.c sqlite3.h 和测试程序放在一个目录下 #include #include intma
编译
Linux
内核kernel时遇到的
问题
与解决方案
文章目录
编译
Linux
内核kernel时遇到的
问题
与解决方案
问题
1:scripts/sign-file.c:25:10: fatal error: openss1/opensslv.h: No such file or directory解决方法:
问题
2:/bin/sh: 1: flex: not found解决方法
问题
3:/bin/sh: 1: bison: not found解决方法
问题
4:/hone/ysz/Desktop/os/
linux
-5.15.5/tools/objtool/include/o
关于在
linux
下
编译
内核出现的一些
问题
今天练习在x86平台上
编译
内核安装内核以及内核模块,发现了一个比较纠结的
问题
。我利用的是虚拟机的工具,所以文件大部分存放在windows与
linux
共享的文件中,结果
编译
时就出错了,查找原因时因为在windows平台下的文件系统格式不对,因为在D盘式NTFS的,所以出现了如下的错误:““ln:创建符号链接”include/asm”:不支持的操作。”后来复制到home目录下,结果在自己的主目录下新建
Linux
内核
编译
问题
查询一下(arm-
linux
-gnueabihf-gcc -v) 然后继续
编译
,又出现: 要安装库(libcurses) 同时停在了正在连接(如上)。。。。。 解决网络
问题
:https://blog.csdn.net/Strive_For_Future/article/details/100006937?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare&d.
linux
ace
编译
,
Linux
下
编译
安装ACE时遇到的
问题
及解决
首先把文件解压,我解压在了/Software文件夹下,解压后会出现一个名字为ACE_wrappers的文件夹。这样所有ACE的源文件都在/Software/ACE_wrappers里面1.1 配置环境变量:# vi /etc/profile增加如下的内容ACE_ROOT=/Software/ACE_wrappers ------就是上面存放ACE源文件的目录export ACE_ROOTLD...
Linux/Unix社区
23,224
社区成员
74,536
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章