Dav*_* M. -1 c c++ shared-libraries conflicting-libraries
我正在OpenWRT机器(ARM路由器)上构建PHP7.我想要包含MySQL,所以我也必须构建它.OpenWRT是99.5%的普通linux,但有一些奇怪的构建/共享库事物可能不经常运行,所以我遇到了一些困难.
MySQL构建正常(经过一些调整后),我有一个libmysqlclient.so工作.但是,configurePHP7 的过程在尝试链接MySQL测试程序时失败,因为libmysqlclient.so必须与C++标准库链接,而不是C标准库.(MySQL显然至少部分是C++,它使用std::...stuff....) Configure尝试编译测试程序gcc,其中不包括链接中的C++库,因此测试失败.
我通过制作一个简单的C/C++切换脚本来解决这个问题:如果命令行包含-lmysqlclient那么我就是exec g++ $*其他人exec gcc $*.然后我告诉configure我使用我的脚本作为C编译器.
我发现必须有更好的方法来处理这个问题.似乎libmysqlclient.so应该有一些方法告诉链接器它也需要它libstdc++.so,所以即使gcc用于链接,所有必要的库也会被拉入.
有没有办法标记依赖关系libmysqlclient.so?或者configure更聪明地运行测试程序?
您几乎不应尝试手动链接C++标准库.使用g ++链接C++程序.gcc知道使用哪个库及其所在位置的细节,因此您不必这样做.
现在问题是,何时使用g ++,何时不使用.这个问题的一个可能答案是"总是使用g ++".没有任何伤害.g ++可以很好地链接C程序.生成的程序没有开销.链接过程本身可能会有一些性能损失,但除了最庞大的程序之外,它可能不会引起注意.