为了便于讨论,我将使用单字母标识符来描述这种情况。
我有一个静态库“A”,它正在共享库“B”中使用,它正在应用程序“C”中使用。
如果我在主服务器上构建所有三个,则测试应用程序运行时没有错误。但是,如果我将“B”复制到另一台计算机并在该计算机上构建“C”,我会在执行时获得核心转储。我和其他两台具有相同结果的计算机一起试过这个。但是,如果我在其中一台计算机上构建“A”和“B”,那么我可以在任何计算机上构建并执行“C”而不会出错(这包括最初用于构建“A”和“A”的服务器) B“)。
我通常怀疑操作系统中存在某种不兼容性或g ++中的版本不匹配。但是,我已经检查了所有涉及的机器上的版本是相同的。
操作系统版本为:4.4.0-31-通用#50-Ubuntu x86_64 GNU / Linux g ++版本是:g ++(Ubuntu 5.4.0-6ubuntu1~16.04.1)5.4.0 20160609
我还用ldd检查了“B”的依赖关系,无论在哪里构建“B”,它们都是相同的。
我可能会因此而导致完全失败。建议非常感谢!