Makefile.am: error: C++ source seen but 'CXX' is undefined

在尝试编译比特币项目时,执行autogen.sh脚本时遇到了'error: C++ source seen but 'CXX' is undefined'的错误。本文详细介绍了这一问题的背景、错误关键字及具体的解决方法,通过解决这个问题,成功完成了编译过程。

背景

在Linux下编译 bitcoin 时所遇到的一些问题

错误关键字

Makefile.am: error: C++ source seen but 'CXX' is undefined
Makefile.am:   The usual way to define 'CXX' is to add 'AC_PROG_CXX'
Makefile.am:   to 'configure.ac' and run 'autoconf' again.
autoreconf: automake failed with exit status: 1

内容

在执行 ./autogen.sh 时遇到的错误

cly@admin:~/project/bitcoin/bitcoin-master$ ./autogen.sh 
Makefile.am:8: error: Libtool library used but 'LIBTOOL' is undefined
Makefile.am:8:   The usual way to define 'LIBTOOL' is to add 'LT_INIT'
Makefile.am:
### 解决 `Unterminated conditional directive` 和 `unterminated #ifndef` 错误 `Unterminated conditional directive` 和 `unterminated #ifndef` 错误通常是由于条件编译指令(如 `#ifndef`、`#ifdef`、`#if`)没有对应的结束指令(如 `#endif`)造成的。 #### 检查 `#endif` 是否缺失 确保每个 `#ifndef` 都有对应的 `#endif`。例如,正确的头文件保护格式如下: ```cpp #ifndef TETRISWIDGET_HPP #define TETRISWIDGET_HPP // 头文件内容 #endif // TETRISWIDGET_HPP ``` #### 检查注释和特殊字符 注释或特殊字符可能会干扰预处理器对 `#endif` 的识别。要确保头文件中没有未闭合的注释,以下是错误和正确示例: ```cpp // 错误示例:未闭合的注释 /* 这是一个未闭合的注释 #endif // TETRISWIDGET_HPP // 正确示例 /* 这是一个闭合的注释 */ #endif // TETRISWIDGET_HPP ``` #### 检查嵌套的条件编译指令 如果头文件中存在嵌套的条件编译指令,要确保每个指令都有正确的结束。例如: ```cpp #ifndef TETRISWIDGET_HPP #define TETRISWIDGET_HPP #ifdef SOME_FEATURE // 当 SOME_FEATURE 定义时的代码 #endif #endif // TETRISWIDGET_HPP ``` ### 解决 `collect2.exe: error: ld returned 1 exit status` 错误 `collect2.exe: error: ld returned 1 exit status` 错误通常是链接器(`ld`)在链接过程中出现问题导致的。常见原因及解决方法如下: #### 缺少目标文件或库文件 确保所有需要的目标文件和库文件都正确包含在链接命令中。例如,在 Makefile 中: ```makefile CXX = g++ CXXFLAGS = -Wall -std=c++11 all: main main: main.o TetrisWidget.o $(CXX) $(CXXFLAGS) -o main main.o TetrisWidget.o main.o: main.cpp TetrisWidget.hpp $(CXX) $(CXXFLAGS) -c main.cpp TetrisWidget.o: TetrisWidget.cpp TetrisWidget.hpp $(CXX) $(CXXFLAGS) -c TetrisWidget.cpp clean: rm -f main *.o ``` #### 符号冲突 检查代码中是否存在符号冲突,例如多个文件中定义了相同的全局变量或函数。确保每个符号在整个程序中只有一个定义。 #### 库文件版本不兼容 如果使用了外部库,确保库文件的版本与代码兼容。有时候,不同版本的库文件可能会导致链接错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值