erron :150

当你试图在mysql中创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的。像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上,这个mysql报错已经被报告是一个mysql本身的bug并出现在mysql 开发者列表当中很多年了,然而这似乎又是一种误导。

在很多实例中,这种错误的发生都是因为mysql一直以来都不能很好的支持的关系的问题, 更不幸的是它也并没有指明到底是哪一个问题会导致上面那种错误,下面我把导致这个可怕 的150错误的常见原因列出来了,并且我以可能性的大小作了排序

已知的原因:

1, 两个字段的类型或者大小不严格匹配,例如,如果一个是INT(10), 那么外键也必须设置成INT(10), 而不是 INT(11) 也不能是 TINYINT. 你得使用 SHOW 命令来查看字段的大小,因为一些查询浏览器有时候把 int(10) 和int(11) 都显示为integer。另外,你还必须确定两个字段是否一个为 SIGNED,而另一个又是UNSIGNED, 这两字段必须严格地一致匹配,更多关于signed 和 unsigned 的信息,请参阅:http://www.verysimple.com/blog/?p=57

2, 你试图引用的其中一个外键没有建立起索引,或者不是一个primary key , 如果其中一个不是primary key 的放,你必须为它创建一个索引。

3, 外键的名字是一个已经存在的一个键值了,这个时候,你应该检查你的数据库以确保外健名字是唯一的,或者你在键名后面加上几个随机的字符以测试是否是这个原因。

4, 其中一个或者两个表是MyISAM引擎的表,若想要使用外键约束,必须是InnoDB引擎,(实际上,如果两个表都是MyISAM 引擎的,这个错误根本不会发生,但也不会产生外键),你可以通过查询浏览器来设置表的引擎类型

5, 你可能设置了ON DELETE SET NULL, 但是相关的键的字段又设置成了NOTS NULL 值。你可能通过修改cascade 的属性值或者把字段属性设置成 allow null 来搞定这个bug.

6, 请确定你的Charset 和 Collate 选项在表级和字段级上的一致

7, 你可能设置为外键设置了一个默认值,如 default=0

8, 在这个关系里面,其中的一个字段是一个混合键值中的一个,它没有自己独立的索引,这时,你必须为它创建一个独立的索引。

9, ALTER 声明中有语法错误

10. 要连接的两个表的编码格式不同
<think>好的,用户遇到了编译错误,提示找不到项目或库。我需要根据提供的引用内容和其他知识来给出解决方案。首先,用户的问题可能涉及CMake配置、编译器路径或权限问题。 引用[2]提到CMake找不到C编译器,建议检查CMakeError.log,这可能是因为编译器未安装或路径未正确设置。另外,引用[1]提到全局设置编译选项的重要性,避免ABI兼容性问题。如果用户的项目中有多个目标,可能需要统一设置选项。 用户还可能遇到权限问题,如引用[3]中的nios2-terminal无法打开UART,这可能与权限不足有关,但当前问题更可能涉及编译器路径或项目配置。 接下来需要分步骤解决:首先检查编译器安装和路径,然后验证CMake配置是否正确,特别是全局选项的设置。还要确认依赖库的路径是否正确,并检查权限问题。如果使用外部库,确保它们被正确链接。最后,建议用户查看生成的错误日志以获取具体信息。 需要将这些步骤用清晰的中文表达,结构分明,确保用户能逐步排查问题。同时,生成相关问题帮助用户深入理解可能的相关问题。</think>### 解决编译错误“找不到项目或库”的逐步指南 #### 1. **检查编译器安装与路径配置** - **确认编译器存在**:若出现类似“No CMAKE_C_COMPILER could be found”[^2],需确保已正确安装编译器(如GCC、Clang、MSVC)。例如: ```bash gcc --version # Linux/macOS验证GCC clang --version # 验证Clang ``` - **设置环境变量**:将编译器路径添加到系统环境变量(如Windows的`PATH`或Linux的`bashrc`)。例如,在CMake中手动指定路径: ```cmake set(CMAKE_C_COMPILER "/usr/bin/gcc") set(CMAKE_CXX_COMPILER "/usr/bin/g++") ``` #### 2. **验证CMake配置** - **全局定义编译选项**:根据引用[1],若项目包含多个目标(如库和可执行文件),需在顶层`CMakeLists.txt`中统一设置编译选项以避免ABI兼容性问题: ```cmake # 在顶层CMakeLists.txt中全局设置 add_compile_options(-Wall -Wextra) # 示例选项 ``` - **检查依赖库路径**:若项目依赖外部库,需明确指定路径: ```cmake find_library(MY_LIB mylib PATHS /path/to/library) if(NOT MY_LIB) message(FATAL_ERROR "库未找到") endif() ``` #### 3. **排查权限问题** - **文件/目录权限**:若编译过程中出现类似“Permission denied”[^3],需确保构建目录和文件具有读写权限: ```bash chmod -R 755 build/ # Linux/macOS权限修复 ``` #### 4. **分析错误日志** - **查看`CMakeError.log`**:根据引用[2],检查`CMakeFiles/CMakeError.log`中的具体错误,例如: - 编译器版本不兼容 - 缺少系统头文件(如`stdio.h`) - **手动编译测试项目**:尝试直接运行`CMakeFiles`目录下的测试文件(如`CompilerIdC.c`),验证编译器是否正常工作。 #### 5. **示例修复流程(以Linux为例)** ```bash # 步骤1:清理旧构建 rm -rf build/ mkdir build && cd build # 步骤2:指定编译器路径(如果需要) export CC=/usr/bin/gcc export CXX=/usr/bin/g++ # 步骤3:重新生成构建系统 cmake .. # 步骤4:根据错误日志调整配置 ``` #### 6. **外部库的特殊处理** - **使用`find_package`**:若依赖第三方库(如OpenCV),需确保其已安装且能被CMake发现: ```cmake find_package(OpenCV REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS}) target_link_libraries(MyProject ${OpenCV_LIBS}) ``` - **手动指定库路径**:若库未在默认路径,通过`-D`传递参数: ```bash cmake -D OpenCV_DIR=/custom/opencv/path .. ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值