问题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 libabca ao bo co
将ao bo co 合并打包成libabca。注意哦(a一定要以lib开始a结束哦)
WIN下我不是很在行,你说的lib大包应该没错。
三,我不是很清楚
希望对你有帮助,我2年工作的精华
从你的这个补丁文件名就可以看出,是先用tar归档后再压缩的,需要使用的时候反向 *** 作即可。
uncompress vacpp90aix61oct2007ptftarZ
tar xvf vacpp90aix61oct2007ptftar
然后在安装此文件
如果子程序调用成功,Windows下的system函数返回0,该返回值不是子进程返回值,在Windows系统中因为进程间没有维护相应的父子关系,所以,也无法得到子进程的返回值。
可以编写如下代码C代码:
#include <stdioh>
#include <stdlibh>
int main()
{
unsigned ueax = 0;
system("pause");
__asm mov eax, ueax //使用内联汇编,取eax寄存器的值,eax保存函数返回值
printf("%x\n", ueax);
return 0;
}
你要安装的是IBM的xlc吗?还是gcc编译器?
如果是xlc,首先在 *** 作系统中安装依赖的文件集,比如bosadt等等。
然后使用installp命令或者smit installp快捷菜单安装xlc,如果依赖的文件集没有安装,安装信息会有提示,并报错。
如果是gcc编译器,请按照gcc的说明文档编译安装。
以上就是关于c脚本在不同系统中编译和链接依赖的库文件有何区别全部的内容,包括:c脚本在不同系统中编译和链接依赖的库文件有何区别、AIX 6.1环境安装的xlc 9.0版本编译器但是不能编译,求大神指教越详细越好~、AIX c程序里system调用返回720907码是什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)