linux - 遗留的交叉编译功能意外消失了——我怎么知道发生了什么?
问题描述
我在一个非常受限的环境中发展。由于官僚主义的原因,我需要做以下事情:
(1) 在 Windows 上为 Linux 目标编译可执行文件;
(2) 在不安装新软件或软件包的情况下这样做;
(3) 通过 Cygwin 命令终端执行此操作。
这些是我绝对无法改变的固定常数。
以前,由于我无法解释的原因,Cygwin 默认为 Linux 目标编译,我能够毫无问题地维护这个过程。研究这个问题,我不确定它是如何默认这种行为的。
然而,今天早些时候,我介绍了一个同事的脚本来简化我的构建过程,将 CMakeFiles 和 CMakeCache.txt 放在构建目录而不是我的项目文件夹中。作为其中的一部分,我原来的 CMakeFiles 和 CMakeCache 目录丢失了。
然后,我尝试手动将 CC 和 CXX 路径导出到编译器进行编译,尝试了我可以在我的计算机上找到的每个 *gcc.exe 和 *g++.exe 可执行文件。我知道大多数(如果不是全部)跨平台编译工具都以 Linux 的名称标记交叉编译可执行文件,但在任何 Cygwin 驱动器位置都没有找到此类文件。
我还注销并让另一个用户登录以尝试构建,但这具有相同的结果。
我尝试恢复仍在回收站中的 CMakeFiles 和 CMakeCache 文件,但重复使用这些文件被证明是无效的。
我知道的:
Cygwin 中有一个 /opt/gcc-tools/ 目录,其中不包含 gcc 可执行文件,但是在项目初始安装到系统中的过程中,有人在搞乱它。/opt/ 目录中没有其他已安装的文件或程序。
将 CC 和 CXX 路径设置回 null 会导致 CMake 默认为 /usr/bin/cc 和 /usr/bin/c++。这些文件没有 linux 版本。
MinGW 已安装,我不确定它是否与跨平台怪异有关。
Cygwin 的 usr/share/cmake/modules/platform 部分中有各种 LINUX-{GNU/INTEL/CLANG}.cmake 文件。这些可能只是用于检查交叉编译,但如果可以对其进行编辑以使事情正常运行,我不会反对。
我的 build.sh 文件如下所示:
export CC=/usr/bin/gcc.exe
export CXX=/usr/bin/gcc.exe
pushd build > /dev/null
cmake ..
make all install -j8
popd /dev/null
以前是一个简单的
cmake .
make
没有安装或 -j8
我意识到这是一个在不访问终端和系统的情况下难以调试的问题。我的一个目标是让 cmake 再次吐出 a.out 文件而不是 a.exe 文件。希望这将阐明系统在此过程中最初是如何工作的。
解决方案
推荐阅读
- mongodb - MongoDB计算所有出生在不同地点的独特人
- php - 编辑 php 文件,但只显示字符串之间的数据
- vba - 如何通过 VBA 在 Word 中的纯文本内容控件中获取文本
- swift - 从不调用 SceneDelegate 函数
- mysql - MySQL 存储过程问题,生成自定义 ID
- database - 从 Google 表格单元格的工具提示中复制/粘贴文本
- android - React-Native 的 HeadlessJS:连续运行 javascript 函数
- java - 从 API 请求运行特定功能 - 未找到后端
- python - 导入具有不同结构的txt文件的Python问题
- node.js - 如何在芒果(物化路径类别)中获取类别的父母和孩子的数组?