关于Linux下compile的错误FRM-91500解决方法

本文介绍了解决Linux环境下编译pll、fmb和mmb时出现的错误的方法。通过在frmcmp_batch.sh中设置ORACLE_TERM=vt220和NLS_LANG=AMERICAN_AMERICA.UTF8来尝试解决问题。

Linux下编译pll,fmb和mmb时报错

[oracleas@tuning forms]$ frmcmp_batch.sh module=WU_TEST_106.fmb userid=webutil/webutil@tuning compile_all=yes module_type=form
FRM-91500: Unable to start/complete the build.

解决办法:

在$ORACLE_HOME/bin下的frmcmp_batch.sh加入
export ORACLE_TERM=vt220
export NLS_LANG=AMERICAN_AMERICA.UTF8

frmcmp.sh还是不能用,按oracle提供的方法也不行,不知道是怎么回事

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7865774/viewspace-619537/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7865774/viewspace-619537/

<think>我们正在分析用户的问题:执行OpenSSL的Configure命令时出现错误'target already defined - linux-armv4 (offending arg: CROSS_COMPILE=arm-linux-gnueabihf-)'。 根据用户提供的命令: ``` ./Configure linux-armv4 shared no-asm --prefix=/home/book/openwrt/linux-intelligent-gateway/gateway-240228/openssl-1.0.2t/bin CROSS_COMPILE=arm-linux-gnueabihf- ``` 错误信息指出:目标(target)已经被定义(linux-armv4),而触发的参数是`CROSS_COMPILE=arm-linux-gnueabihf-`。 在OpenSSL的配置系统中,`Configure`是一个Perl脚本,它接受一些预定义的目标(如`linux-armv4`)和选项(如`shared`、`no-asm`)。此外,它还可以接受一些环境变量或直接传递的参数来设置交叉编译工具链。 错误的原因是:`CROSS_COMPILE`这个参数在OpenSSL的配置脚本中并不是一个直接接受的选项(option),而是通过环境变量传递的。也就是说,在命令行中直接写`CROSS_COMPILE=...`会被当作一个目标(target)来解释,而目标已经由`linux-armv4`指定了。 在OpenSSL的配置中,设置交叉编译器的方法通常是: 1. 通过设置环境变量`CROSS_COMPILE`,然后在命令行中只指定目标(target)和其他选项。 2. 或者,在目标(target)中已经隐含了交叉编译器的前缀,然后通过环境变量来覆盖。 因此,正确的做法应该是: - 将`CROSS_COMPILE`作为环境变量传递,而不是作为命令行参数。 修改命令为: ```bash export CROSS_COMPILE=arm-linux-gnueabihf- ./Configure linux-armv4 shared no-asm --prefix=/home/book/openwrt/linux-intelligent-gateway/gateway-240228/openssl-1.0.2t/bin ``` 或者在一条命令中(不使用export): ```bash CROSS_COMPILE=arm-linux-gnueabihf- ./Configure linux-armv4 shared no-asm --prefix=/home/book/openwrt/linux-intelligent-gateway/gateway-240228/openssl-1.0.2t/bin ``` 这样,`CROSS_COMPILE`就不会被当作目标参数传递给配置脚本,而是作为环境变量被脚本读取。 另外,注意`CROSS_COMPILE`的值后面有一个短横线(`-`),这是正确的,因为交叉编译工具的前缀通常以`-`结尾(例如`arm-linux-gnueabihf-gcc`,前缀就是`arm-linux-gnueabihf-`)。 总结错误原因:在命令行中直接写`CROSS_COMPILE=...`会被配置脚本误认为是一个目标(target),因为配置脚本会将所有非选项的参数都视为目标。而目标已经在第一个参数指定为`linux-armv4`,所以第二个目标参数(`CROSS_COMPILE=...`)就重复了。 参考引用[1]中,交叉编译FFmpeg时也是通过设置环境变量或者通过`--cross-prefix`选项来指定交叉编译前缀,但OpenSSL的配置脚本并不支持`--cross-prefix`选项(它使用环境变量`CROSS_COMPILE`)。因此,我们需要调整传递方式。 另外,引用[3]中展示了两种编译方式(makefile和cmake),其中makefile方式在配置时通过`CC=arm-rockchip-linux-gnueabihf-gcc`直接指定编译器,这也是一种替代方法。对于OpenSSL,我们也可以使用`CC`环境变量来指定C编译器,而不使用`CROSS_COMPILE`。例如: ```bash CC=arm-linux-gnueabihf-gcc ./Configure linux-armv4 shared no-asm --prefix=... ``` 但是,使用`CROSS_COMPILE`可以同时指定多个工具的前缀(如ar、ranlib等),而`CC`只指定C编译器。所以,如果除了编译器之外还有其他工具需要前缀,使用`CROSS_COMPILE`更方便。 综上所述,我们只需要将`CROSS_COMPILE`作为环境变量传递即可解决该问题。 </think>### OpenSSL 配置命令报错分析 您遇到的报错信息 `target already defined - linux-armv4 (offending arg: CROSS_COMPILE=arm-linux-gnueabihf-)` 表示 **命令行中存在重复的参数定义或参数格式错误**,具体原因如下: #### 错误本质 1. **目标平台重复定义** OpenSSL 的 `Configure` 脚本会将 `linux-armv4` 识别为目标平台参数(target),而 `CROSS_COMPILE=arm-linux-gnueabihf-` 被误识别为另一个目标平台参数: - `linux-armv4` → 第一个目标平台参数 - `CROSS_COMPILE=...` → 被误识别为第二个目标平台参数 脚本不允许同时定义两个目标平台,因此报错[^1]。 2. **参数语法错误** `CROSS_COMPILE` 是环境变量而非命令行参数,不能直接写在 `Configure` 命令中。正确用法是先导出环境变量: ```bash export CROSS_COMPILE=arm-linux-gnueabihf- ./Configure linux-armv4 shared no-asm --prefix=... ``` #### 修复方案 **方法 1:设置环境变量(推荐)** ```bash # 先导出交叉编译工具链前缀 export CROSS_COMPILE=arm-linux-gnueabihf- # 再执行配置命令(移除CROSS_COMPILE参数) ./Configure linux-armv4 shared no-asm \ --prefix=/home/book/openwrt/.../openssl-1.0.2t/bin ``` **方法 2:通过 CC 参数指定编译器** ```bash ./Configure linux-armv4 shared no-asm \ --prefix=/home/book/openwrt/.../openssl-1.0.2t/bin \ CC=arm-linux-gnueabihf-gcc # 直接指定C编译器 ``` #### 参数解析对照表 | 错误命令中的参数 | 性质 | 正确用法 | |------------------|------|----------| | `linux-armv4` | 目标平台(target) | 保留为第一参数 | | `CROSS_COMPILE=...` | 环境变量 | 通过 `export` 提前设置 | | `--prefix=...` | 安装路径选项 | 保持原格式 | | `shared` | 编译选项 | 保持原格式 | | `no-asm` | 编译选项 | 保持原格式 | #### 根本原因 OpenSSL 的配置脚本使用空格分隔参数,当遇到 `CROSS_COMPILE=arm-linux-gnueabihf-` 这种带等号的字符串时: 1. 脚本不会识别为环境变量赋值 2. 而是将其视为独立参数 3. 由于该参数不符合选项格式(如 `--prefix`),被误判为目标平台名称[^2] #### 补充说明 交叉编译时需确认工具链兼容性: - `arm-linux-gnueabihf-` 表示支持硬浮点的 ARM 工具链(ARMHF) - 若目标平台是软浮点(ARMEL),需使用 `arm-linux-gnueabi-` 前缀[^3] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值