【发布时间】: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