为什么在两个略有不同的机器上编译的库表现略有不同?

Eig*_*ght 3 c++ gcc cross-compiling buildroot libraries

这是设置:

我的同事有一台带有gcc 4.3.3交叉编译器的Fedora x64_86机器(来自buildroot).我有一个Ubuntu 9.04 x64_86机器与相同的交叉编译器.

我的同事建立了一个在测试机器上运行的库+测试应用程序,我编译了相同的库和testapp,它在同一台测试机器上崩溃了.

据我所知,gcc是针对buildroot编译的ucLibc构建的,所以,相同的代码,相同的编译器.哪种主机差异会影响交叉编译?

有任何见解赞赏.

更新:为了澄清,编译器是相同的.库和testapp的源代码是相同的.唯一的区别是testapp + lib已在不同的机器上编译.

ebo*_*ebo 6

如果您的代码崩溃(我假设你得到一个sigsegv),似乎有一个bug.它很可能是某种未定义的行为,比如使用悬空指针或写入缓冲区边界.

不明确行为的不幸之处在于,它可能适用于某些机器.我想你在这里遇到这样的事件.尝试找到错误,你会知道会发生什么:-)

  • 这与埃博所说的并不矛盾.未定义的行为是未定义的,并且可能完全受到任何影响,例如编译器在不同操作系统上使用的动态库的略有不同版本.我敢打赌,这个bug可以追溯到未定义的行为. (5认同)