当前位置:  技术问答>linux和unix

直接移植GCC和GLIBC二进制文件是否可行?

    来源: 互联网  发布时间:2017-04-01

    本文导语:  一个项目,在LINUX平台上开发。 发布时,希望能在用户机器上用我们自己的编译环境进行编译 即,使用我们指定的GCC编译代码,include我们的头文件,链接到我们的GLIBC 我感觉这样不可行啊,操作系统那么多,一个环...

一个项目,在LINUX平台上开发。
发布时,希望能在用户机器上用我们自己的编译环境进行编译
即,使用我们指定的GCC编译代码,include我们的头文件,链接到我们的GLIBC
我感觉这样不可行啊,操作系统那么多,一个环境下能用另一个环境下就不行了
GLIBC又依赖于操作系统,GCC,GLIBC又相互依赖
想问问这方面经验比较多的同学,这样做可行么?
另问,LINUX下的程序都是怎么发布的,难道只能用源码在每台机器上编译?
谢谢回复~

|
要搞清楚这个问题需要初步了解 ELF 和 GOT

什么时候可以:
大多数时候都可以。只要你编译机用glibc/linux, 运行机也有glibc/linux,那么就可以。
软件代码 = 自身代码 + 库函数的编号 

原理是,可执行代码和你include什么头文件没直接关系,生成的机器指令和运行机上一样就可以。
glibc依赖系统,但是linux系统给glibc使用的系统调用号是不变的。各库函数用一个代码表示,此代码在各版本的glibc库中的序号是不变的。
举个例子:
int main()
{
    char *buf;

    buf = (char*)malloc(1024);
    printf("Malloced %pn", buf);
    return 0;
}
1). malloc最终会变成系统中的brk, 这个调用对所有linux都一样。 所以可以运行。
2). print/malloc在软件本身代码中只是一个跳转,具体代码由运行机器提供。

(gdb) disassemble main
Dump of assembler code for function main:
   0x0000000000400504 :     push   %rbp 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 毫无疑问龙芯电脑的出世是我国的一件大事,不知从哪一版的Linux移植过去的?移植Linux复杂吗?
  • 请教下 2.6移植 和 YAFFS2移植到问题
  • 移植USB驱动的小问题
  • arm库的移植
  • mx27开发板Linux移植问题请教
  • 关于在2440上移植linux的问题
  • 专做跨平台移植有没有前途?
  • 可移植C++类库 GNU Common C++
  • 程序可移植性问题
  • EasyARM2200的U-BOOT移植不知谁做过没?
  • WINDOWS GDI程序如何移植到LINUX下?望高手们赐教!!!
  • 求可移植到arm上运行的内存检测软件
  • 驱动移植应该怎么入手
  • 高手帮我看看SNMP的移植问题
  • Apache可移植运行库 APR
  • iptables移植到开发板
  • linux上的c程序移植到solaris 10 需要作哪些工作
  • 关于程序移植,请知道的帮忙,分会加的
  • 急!--请教移植linux内核!
  • u-boot移植问题。


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,