c脚本在不同系统中编译和链接依赖的库文件有何区别?
发布网友
发布时间:2022-10-25 23:41
我来回答
共3个回答
热心网友
时间:2023-10-04 13:24
问题1,
区别很大,跨OS编译的区别就在于OS的本质区别,有一下几点:
a, 字节排序,一个int型的数据在windows里是由高地址存到低地址的4个字节的(假设是32位机器),但是在某些UNIX服务器,如AIX,它的排序方式就相反的,所以当程序被编译成低级语言(例如汇编)的时候,内存及CPU的处理就会截然相反
b, 字长,有些unix服务器是64位的,但大多WINDOWS是32位,那么定义一个整形的时候就有用8个字节和4个字节的区别,字长不一样,那么执行起来用对内存的使用也自然就不一样咯。
c,所谓的库,也是由编译器编译出来的,在不同的OS下,由同一个代码编译出来的库也会不一样。
d,编译器也各不相同,也会导致编译出程序不完全相同。
e,所谓的调用,也就是将程序和库一起打包,然后在找到库里面所定义的函数罢了
综上,当一个程序或者库要从其他OS搬到另一个不同规格的OS上的时候,一定要重新编译一下草能确保程序跑起来不发生错误,求其原因也就是因为OS的本质区别,兼容的话,其实就是看OS是否在规格上有没有本质区别
二,库文件的编译是单向的,所以无法取回源码,
.a库的打包例: ar r libabc.a a.o b.o c.o
将a.o b.o c.o 合并打包成libabc.a。注意哦(.a一定要以lib开始.a结束哦)
WIN下我不是很在行,你说的lib大包应该没错。
三,我不是很清楚
希望对你有帮助,我2年工作的精华
热心网友
时间:2023-10-04 13:24
楼主是刚刚从WIN平台转向LINUX做驱动的??只有问题2我勉强能知道一点。
1)c脚本在不同系统中编译和链接依赖的库文件有何区别?
在GNU当中,只要用gmake和autoconf来处理这个问题,但是仍然非常复杂。
2)GCC中的库文件能否拿到源代码?这种.a库文件似乎就是.o目标文件的简单打包,这种打包是用哪条命令实现的?
DOS/WIN环境中用到的.lib文件是否也是.obj文件的简单打包?
LINUX下面你用 man ar就可以看到使用说明。楼主关于这个问题的理解基本正确。
3)这条是专门针对LINUX的问题,是关于<printk这种API函数>和<printf这种涉及直接访问硬件的库函数>的使用权限的。
i)为什么编写模块时只能调用API,而不能编连printf这种库函数?
ii)用户态的应用程序,是否当拥有root权限时,就能编连并使用printf这种直接访问硬件的函数;而当只有普通用户权限时,如果直接访问硬件会被拦截,只能访问printk这种API?
这个问题你要阅读LINUX内核源码和驱动程序设计相关的书籍。
热心网友
时间:2023-10-04 13:25
上大学的时候没好好学,你说的这个问题我一点都。。。。。。。