当前位置: 技术问答>linux和unix
自己编的动态库与应用程序必须使用一个(版本)gcc吗?
来源: 互联网 发布时间:2016-11-01
本文导语: 本帖最后由 feiyinzilgd 于 2010-12-30 12:00:18 编辑 比如用gcc4编了一个so文件 应用程序用gcc3编译, 里面调用so文件中的函数, 是不是不可以啊 | 本帖最后由 feiyinzilgd 于 2010-12-30 12:43:37 编辑 不一定。 比如嵌...
应用程序用gcc3编译, 里面调用so文件中的函数,
是不是不可以啊
|
不一定。
比如嵌入式里面。
你必须保证你的开发板的Linux以及根文件系统,还有应用程序是同一个gcc.
也就是说:如果你的开发板的Linux和根文件系统都是用gcc4.3.2编译的。
然后你写应用程序用的是gcc3.2.1编译的,那么程序运行的时候很可能就出问题。
这个东西我也没仔细研究过。
希望大家一起讨论,讨论。
|
我也觉得应该可以,系统是版本一样的API就没变,编译器也不会因为版本的变化而作不同的函数签名改编吧,要是那样的话岂不是很变态?
|
ppc呢?aix呢?
|
应根据具体情况而定!
|
不一定要完全使用同一个版本,但版本间的差异不能太大了。就如你用一个2.xxx版本编译的程序不能在RHEL5运行一样。规根结底看两不同编译器对动态库的约定是不是一样的。
|
我遇到过,我编过一个小的测试程序,给朋友用时总是出错,在我这里却是可以的,折腾了好久,后来发现他改调用程序了,编译后就不行了原来编译.so的gcc版本高,编译调用程序的gcc版本低,后来他把.so又重新编译了一遍就好了。
调用程序的gcc版本高的情况我没试过。
用过一些公司给的驱动之类的,其实也就是一动态库,多数情况下他们都要问内核版本,给你该内核系列的,也是有时好用,有时要他们重新编译下。
所以我的结论是,有时可以有时不可以,具体还是看gcc相差多少,感觉差的多了是不行的。
没做过嵌入式,所以上面说的都不包括嵌入式系统的。
调用程序的gcc版本高的情况我没试过。
用过一些公司给的驱动之类的,其实也就是一动态库,多数情况下他们都要问内核版本,给你该内核系列的,也是有时好用,有时要他们重新编译下。
所以我的结论是,有时可以有时不可以,具体还是看gcc相差多少,感觉差的多了是不行的。
没做过嵌入式,所以上面说的都不包括嵌入式系统的。
|
如果用c语言写的,而且都是同一个Linux内核(主要版本号一致,保证api不发生大的变更)编译的,那么大多数都可以。
如果C++的话,那就几乎不可以了,因为gcc3-4更改了C++异常的处理,而这不通用(如果编译时打开了禁止异常开关,或许可以)。
如果C++的话,那就几乎不可以了,因为gcc3-4更改了C++异常的处理,而这不通用(如果编译时打开了禁止异常开关,或许可以)。