当前位置: 技术问答>linux和unix
关于在linux编译的问题
来源: 互联网 发布时间:2016-08-10
本文导语: 要编译a.cpp文件`,这个文件需要用f.so文件 LInux中编译 在a.make文件中 ”LINKLIB =“ 什么也没有指定, make -f a.make 时没有出错,他需要的f.so文件并没有引用,并且这个文件也不存在,为什么没有出错 windows中编译 ...
要编译a.cpp文件`,这个文件需要用f.so文件
LInux中编译
在a.make文件中 ”LINKLIB =“ 什么也没有指定,
make -f a.make 时没有出错,他需要的f.so文件并没有引用,并且这个文件也不存在,为什么没有出错
windows中编译
在windows的VS2008中没有引用f.lib的话会有error LNK2019的错误,
难道LInux中当没有引用f.so文件时,可以忽略吗?
LInux中编译
在a.make文件中 ”LINKLIB =“ 什么也没有指定,
make -f a.make 时没有出错,他需要的f.so文件并没有引用,并且这个文件也不存在,为什么没有出错
windows中编译
在windows的VS2008中没有引用f.lib的话会有error LNK2019的错误,
难道LInux中当没有引用f.so文件时,可以忽略吗?
|
ls说的有道理。而且ls每天都这么晚睡
|
前三十年睡不醒,后三十年睡不着 :)
其实我也不懂.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
|
一楼晚睡,二楼也不早啊。。。
|
这不是主要问题吧。我在编译东西的时候,如果不指定“-L./ -lXXX”就会报找不到的错误。
还有楼主说的“LINKLIB =”这环境变量具体在Makefile中怎么工作的啊!!!
能不能指点一下啊???
还有楼主说的“LINKLIB =”这环境变量具体在Makefile中怎么工作的啊!!!
能不能指点一下啊???
|
猜测LZ的程序是用的动态载入数据库,这种方式在编译时不需要-llib,但使用的时候需要.so文件。
如果用的是静态载入数据库,编译的时候就需要-llib了。
LZ编译的程序是自己写的还是别人的?如果是自己写的,应该不会问这个问题,个人感觉,哈哈。
如果用的是静态载入数据库,编译的时候就需要-llib了。
LZ编译的程序是自己写的还是别人的?如果是自己写的,应该不会问这个问题,个人感觉,哈哈。
|
不要用windows是思维方式,去思考unix/linux的工作方式。
unix/linux的思想,一个命令只干一件事,但要干好。
因此,在unix/linux中,几乎所有的程序都需要使用到其它程序的功能。
gcc在编译时,用-I命令去指定头文件的路径,-L命令指定库文件的路径,-l命令指定程序需要的库文件。
f.so文件,是一个动态链接库文件。因此,需要用-l和-L命令去指定它。
unix/linux的思想,一个命令只干一件事,但要干好。
因此,在unix/linux中,几乎所有的程序都需要使用到其它程序的功能。
gcc在编译时,用-I命令去指定头文件的路径,-L命令指定库文件的路径,-l命令指定程序需要的库文件。
f.so文件,是一个动态链接库文件。因此,需要用-l和-L命令去指定它。
|
我还以为这个问题解决了呢。
在你的工程所有源文件里搜索下有没有用过一个函数 dlopen,如果有,编译时不需要-L或-llib。
请看我7楼的回复,在网上搜索下相关内容,你就知道为什么不需要在编译时候加动态库选项了。
在你的工程所有源文件里搜索下有没有用过一个函数 dlopen,如果有,编译时不需要-L或-llib。
请看我7楼的回复,在网上搜索下相关内容,你就知道为什么不需要在编译时候加动态库选项了。
|
.so文件在linux下其实是共享库(shared object),其加载方式有两种,动态加载和链接时静态加态.
动态加载是在代码中通过dlopen,dlsym来调用库中的函数, 不需要链接时-l来指定该共享库(不过需要-ldl)
静态加载则是在链接过程中将.so库中的内容链接到新的对象文件中,需要在链接时用-l来指定该共享库,这种方式类型于静态库链接,只是在内存中这个共享库只有一份拷贝, 所有使用这个动态库的程序共享这份拷贝.
动态加载是在代码中通过dlopen,dlsym来调用库中的函数, 不需要链接时-l来指定该共享库(不过需要-ldl)
静态加载则是在链接过程中将.so库中的内容链接到新的对象文件中,需要在链接时用-l来指定该共享库,这种方式类型于静态库链接,只是在内存中这个共享库只有一份拷贝, 所有使用这个动态库的程序共享这份拷贝.