- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们的业务需要在一个平台上编译我们的软件并在另一个平台上交付。这一直很好,直到我们需要编译 mysqlclient 以连接到数据库。
我想知道是否有其他人尝试过针对 mysqlclient 进行编译并在单独的机器上成功运行。
我们遵循的一些文档: https://dev.mysql.com/doc/refman/8.0/en/c-api-building-clients.html
最终,我们尝试了编译和链接各种不同的方式,并根据我们的尝试得到了不同的错误。我们最远的是完全编译,但是运行程序会给我们这样的东西:
bin/myProgram: /lib64/libc.so.6: version `GLIBC_2.14` not found (required by bin/myProgram)
请注意,我们已经尝试从编译的机器链接并交付 libc.so.6,但我们仍然会出现这样的错误,并且无论如何使用多个版本的某些 STL 文件似乎很危险.
这是我们制作的重现该问题的示例小应用程序的 Makefile:
$(TargetDir)/myProgram: $(OBJS)
@ echo
@ echo Linking myProgram
@ g++ -I /work/mariadb-5.5.53/include \ # Tried various versions of MySQL
$(OBJS) -o $@ -L/work/mariadb-5.5.53/libmysql -lmysqlclient
@ echo Build complete!
$(TargetDir)/%.0 : %.C
@ echo Compiling $(notdir $<)
@ g++ -I /work/mariadb-5.5.53/include -o $@ -c $<
编辑:我们的团队采纳了下面接受的回复的建议,改为在 RHEL 6 上编译,并使用它来交付。这是成功的,我们现在可以继续前进了。
我们如何使用上面的 Makefile 进行编译:$ make -s -C src
最佳答案
I'm wondering if anyone else has attempted to compile towards mysqlclient and run on a separate machine with success.
人们经常这样做。它是 RPM 等打包系统的基础。人们也为不同的系统这样做,这被称为“交叉编译”。
不太常见的是为具有给定操作系统的一个版本的系统编译并期望结果在具有该操作系统的较早版本的系统上运行。在某些情况下可行,但想要在不单独编译的情况下支持操作系统的多个版本的人通常通过编译较早版本而不是后者来实现。这会减少兼容性问题,而且出现的问题通常更容易解决。
Note that we've tried linking towards and delivering the libc.so.6 from the machine that was compiled on, but we still give errors like this, and it seems dangerous anyways to have multiple versions of some STL files in use.
将所有需要的共享库与可执行文件一起交付是一种可行的替代方法——实际上可能需要与为早期操作系统版本而不是更高版本构建一起构建,但它不一定足以只需从构建主机复制共享库二进制文件。可执行文件和它所依赖的库,递归地,都需要在运行时动态链接到它们所需库的正确版本。这些以不提供从非标准路径链接库的方式构建的情况并不少见。
另一种选择是执行全静态链接。这会产生(大得多)更大的可执行文件,但它们不依赖于主机系统的库。尽管系统调用仍然存在潜在问题,但此类二进制文件更有可能在目标操作系统的旧版本上运行。
最可靠的替代方案,至少对于编译软件而言,是在您希望支持的最早操作系统上构建并执行静态链接。
如果你正在交付一堆使用相同库的可执行文件,并且你想通过使用共享库来节省空间,那么最好还是在你想要支持的最早系统上构建,并将结果与共享库打包该操作系统版本的库(可能涉及调整或重建某些库)。
关于c++ - 在 RHEL 7 上编译 mysqlclient 并在 RHEL 6 上运行(Linux 上为 g++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57260152/
我目前正在尝试让 g++ 工作,并查看 http://gcc.gnu.org/install/build.html ,我似乎找不到它在哪里说如何“执行编译器的 3 阶段 bootstrap ”。我在哪
James Powell 在他对即将举行的演示文稿的简短描述中说,他自豪地发明了最粗糙的 Python 单行代码之一: (None for g in g if (yield from g) and F
请告诉我我的证明是否正确 We have a connected graph, and specific vertex u in V(G). Suppose we compute the dfs tr
下面的test2和test3结果是不同的。 我对此感到困惑,因为它看起来像相同的逻辑,并且与linux bash ||逻辑不同。 $data = @( [PSCustomObject]@{St
我试图找到一个明确的 G 代码语法规范,而不是单个 G 代码的含义,我无处不在的规范,我的意思是详细的语法规范,目的是编写解析器。 我编写解析器没有问题,我只是在寻找语法规范,例如。我知道您不必总是为
我写了这个 mixin,但它循环了很多时间。你能帮我优化我的代码吗?或者你能建议一些其他的东西来获得想要的结果吗? dfgdfgsdfgsdf 最佳答案 希望这就是您要找的。 $spaces: (4,
默认情况下,g++ 似乎会省略未使用的类内定义方法的代码。示例 from my previous question : struct Foo { void bar() {} void baz(
是否可以将文件内容通过管道传送到 g++编译程序? 我想这样做是因为我想使用数据库中的文件而不是磁盘上的物理文件。可以通过我制作的 API 轻松检索文件内容。 例如,我想做这样的事情: g++ con
如何profile c++代码获取每行代码的调用次数和消耗时间,就像profile工具一样在 Matlab 中呢? 我尝试使用-fprofile-arcs之类的东西,但它只生成代码覆盖率报告,其中可以
如何在几行代码上禁用所有警告。可以使用 GCC 诊断功能禁用特定警告,但是否有针对所有警告的标志。我尝试了这个方法,但不起作用 #pragma GCC diagnostic push #pragma
我有一个链接到 opencv 2.2 的可执行文件。但是,我删除了 opencv 2.2 并安装了 opencv 2.3。 问题是,有没有办法在不重新编译整个源代码的情况下将这个可执行文件链接到新的共
在编译带有一些标志的以下文件时,是否可以让 g++ 显示错误? #include using namespace std; int main() { int arr[ 2 ]; cout
在学习 Haskell 时,我遇到了一个挑战,要找到两个函数 f 和 g,例如 f g 和 f 。 g 是等价的(并且是总计,因此像 f = undefined 或 f = (.) f 这样的东西不算
根据我的理解,Theta 位于 Big O 和 Omega 之间,但我看到了这个声明,但我无法理解为什么交集会出现在这里。我能否对 Θ(g(n)) = O(g(n)) ∩ Ω(g(n)) 获得数学和分
我需要为这个递归函数编写一个迭代函数。 int funcRec(int n){ if(n>1) { return 2*funcRec(n - 1) + 3*funcRec(n
我在 github repository 上有代码示例并在 travis-ci 上创建了一个构建便于复制。 最小的、完整的和可验证的例子 可能不是最小的,但我相信它足够小 它使用 boost.inte
编辑:我们将调用箭头 p纯如果存在这样的函数f即:p = arr f . 我试图更好地掌握 Haskell 中的 Arrows,我想弄清楚什么时候 f >>> (g &&& h) = (f >>> g
我有两个(或更多)函数定义为: val functionM: String => Option[Int] = s => Some(s.length) val functionM2: Int => Op
好像是的。任何直观或严肃的证据都值得赞赏。 最佳答案 没有。 我认为您的问题等同于:给定函数 f 和 g,f 是 O(g) 或 g 是 O(f) 是否总是正确的?这在 SE Computer Scie
如果我设法证明 f(n) = o(g(n))(小 o),那么这两个函数的总和 f( n) + g(n) 应该被“更大”的函数 g(n) 紧紧束缚。 然而,我在证明这一点时遇到了一些麻烦。 最佳答案 以
我是一名优秀的程序员,十分优秀!