【问题标题】:Makefile:439: recipe for target 'mysql.o' failed [closed]Makefile:439:目标'mysql.o'的配方失败[关闭]
【发布时间】:2019-09-18 14:36:09
【问题描述】:

我不是 Linux 专家,但我正在为此学习,这是“挑战”:我想将一个古老的 C 应用程序从 Red Hat 9 移植到更新版本的 Ubuntu / Debian(不幸的是,我没有原始源代码,只有二进制文件)。此应用程序在使用非常旧版本的 MySQL (3.23.54a) 的虚拟机上运行。

在初步测试中,我尝试使用更新版本的 MySQL,并对数据库进行了少量修改:在修复 "TYPE=MyISAM;" by "engine=MyISAM;" 和 "datetime NOT NULL default '0000-00-00 00:00:00'" 使用 "CURRENT_TIMESTAMP"...我得到了一个 " Bad Handshake" 问题(更不用说应用程序需要一些旧版本 MySQL 中的文件才能打开)。那么,第一个问题:唯一的方法是安装旧的 MySQL 版本?

嗯...我尝试使用 GCC 4.8.5(由 apt 安装)从源代码安装这个 MySQL 版本,使用

解决了“Linuxthread 问题”
echo '/* Linuxthreads */' >> /usr/include/pthread.h

and "/usr/bin/ld: errno: TLS 定义在 /lib/libc.so.6 部分.tbss mismatches non-TLS reference in ..." 添加

#include <errno.h>

到被冒犯的文件。所以,我得到了这个:

Makefile:439: recipe for target 'mysql.o' failed
make[2]: *** [mysql.o] Error 1
make[2]: Leaving directory '/home/user/Downloads/mysql-3.23.54a/client'
Makefile:281: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/user/Downloads/mysql-3.23.54a'
Makefile:223: recipe for target 'all' failed
make: *** [all] Error 2

这实际上不是“需要”,而只是我的知识练习(这篇文章也成为提高我英语技能的机会)。

【问题讨论】:

  • 如果没有源代码,打算如何移植?
  • 我只有编译好的文件。在第一次测试中,我将二进制文件复制到新系统 (Ubuntu) 中与旧系统 (Red Hat) 相同的位置,并使用 Qt 3 和更高版本的 GCC 和 MySQL 运行它(我必须复制一些旧版本的文件,并在数据库上进行一些修改以便导入它)。程序打开了,但有错误。有趣的。这只是我的知识的一个实验。如果我降低 MySQL 和 GCC 的版本,也许我可以运行应用程序,不是吗?如果我可以只为这个应用程序使用那些古老的版本呢?
  • 如果你只有一个二进制文件,那么 GCC 就没有任何关系。
  • 谢谢!我在想,这很好。但是...我需要gcc来安装mysql,对吗?我可以使用最近的 gcc 版本来安装旧的 mysql 吗?

标签: linux gcc operating-system


【解决方案1】:

您应该查看虚拟机。虚拟机应该可以帮助您创建一个在当前环境之上运行的新虚拟环境。您可以根据需要对虚拟环境进行参数化,而不会影响当前环境。免费的虚拟机提供商:https://www.virtualbox.org

您所需要的只是与您要重现的操作系统相对应的虚拟机映像。例如这里你想要 Red Hat 9(来自官方网站)http://archive.download.redhat.com/pub/redhat/linux/9/en/iso/i386/

【讨论】:

  • 感谢您的即时回复。实际上我有那个 VM 运行应用程序,但“有趣的点”不是那个。
猜你喜欢
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
  • 2018-06-06
  • 2017-05-17
  • 2014-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多