C++ 如何在C++;

C++ 如何在C++;,c++,shared-libraries,googletest,googlemock,C++,Shared Libraries,Googletest,Googlemock,在我们的应用程序中,我们使用几个动态链接的库。我们最近更新了其中一个库的版本。该库的开发人员在这个新版本之后提供了一个主要方法(只需打印Hello World) 问题是我们正在使用GTest和GMock,它们生成自己的主方法。当我们现在运行测试二进制文件时,我们只得到“helloworld”,因此采用了错误的main方法 我们如何才能强制使用测试的主要方法 更新:这似乎是一个GMock/GTest问题。main方法通常是生成的,但情况并非如此,因为它现在找到了一个已经存在的main方法。在您的情

在我们的应用程序中,我们使用几个动态链接的库。我们最近更新了其中一个库的版本。该库的开发人员在这个新版本之后提供了一个主要方法(只需打印Hello World)

问题是我们正在使用GTest和GMock,它们生成自己的主方法。当我们现在运行测试二进制文件时,我们只得到“helloworld”,因此采用了错误的main方法

我们如何才能强制使用测试的主要方法


更新:这似乎是一个GMock/GTest问题。main方法通常是生成的,但情况并非如此,因为它现在找到了一个已经存在的main方法。

在您的情况下,没有办法。您必须从共享库中删除main。它根本不属于那里。

我有一个类似的问题,两个库都有主方法,通过将库的顺序更改为链接器解决了这个问题。

我完全同意你的说法。让开发人员从该库中更改它将是可怕的。我希望有一个快速而肮脏的把戏来“忽略”这个主要方法。@W.Goeman如果它是一个开源库,那么你可以自己做,不是吗?如果是商业图书馆,那么他们应该这样做。无论如何,对于一个共享库来说,定义main()是一个严重的问题。我们联系了该库的开发人员,他们承诺会解决这个问题。库中的main方法似乎确实是一个严重的问题:)我不认为/lib/x86_64-linux-gnu/libc.so.6有main也是一个问题,运行库时可以“人工检查”版本(例如../libfoo.so打印构建版本)。我想这更像是图书馆链接订单的问题