⑴ 32位(i686)linux的ubuntu,交叉编译3.0.2的vsftp老出错
交叉编译环境或者编译之前的设置有问题。
当然还一个可能就是 vsftp 对交叉编译的支持不好。导致调用错了 so 函数库文件。
你这个提示明显的是调用了当前系统的 /lib/libpam.so.0 ,交叉编译环境,肯定不能调用这个 so 函数库文件。
⑵ 为什么好多软件都区分32位和64位,到底有什么区别
64位软件和32位软件最大的区别是:64位的软件可以同时操作大于4GB的内存(注意这里的内存指的是地址空间,而不是物理内存)。
但是,上述过过程有几个非常重要的地方:
1)动态链接库
2)系统API首先,你32位的操作系统上一般是没有64位的库文件,如果你的应用程序源代码中引用了只有64位的动态库中才有的函数,很显然你链接的时候就会出问题。
另外,我们很多程序肯定用到了read和write等C语言库函数,而库函数的实现是依赖于系统API的。如果你工作在windows上,程序大多数是以exe形式发布的,你得到的程序是目标文件以后的结果,本身是带有位数的;如果你工作在linux上,本身大部分软件包rpm等也是已经编译好的,就是说,它们本身就是具有“位数”的。
如果你得到的是源码,那么基本上你的应用程序还没有“位数”的概念,你用多少位的编译器去编译它,它就是多少位的应用程序。我们这里讨论多少位的程序,都是针对已经编译到目标文件以后的状态。所以32位和64位软件的并存是CPU、系统、编译综合决定的,而这些都是因为时代的需要。
对于Windows系统而言,64位的系统上往往有32位的库和其他必要的信息,基本上能兼容32位的程序。以上是个人的一些经验和总结,希望可以帮助到大家,如果有不同意见和建议,欢迎评论区留言讨论。