g ++ - 4.6.real:错误:无法识别的选项'-R'

时间:2012-09-27 19:52:13

标签: c boost build autotools libtool

我正在尝试使用此configure命令从源代码编译phpcompiler

./configure  --prefix=/opt/phc-0.3.0.1/    --with-php=/opt/php-5.3.17/

配置错误是,

checking for exit in -lboost_regex-mt... no
checking for exit in -lboost_regex-mt... (cached) no
checking for exit in -lboost_regex... no
checking for exit in -lboost_regex... (cached) no
checking for exit in -lboost_regex... (cached) no
configure: error: Could not link against boost_regex 

完全错误,因为我安装了boost和boost_regex软件包。 libs和头文件。然后我在config.log文件

中挖了这个
configure:17053: g++ -o conftest -g -O2    -L/lib/php5 -L/usr/lib/php5 conftest.cpp /usr/lib/libCrun.so.1 -lphp5 -L/opt/php-5.3.17//lib -R/opt/php-5.3.17//lib -ldl  >&5
g++-4.6.real: error: /usr/lib/libCrun.so.1: No such file or directory
g++-4.6.real: error: unrecognized option '-R'

因此,对于此unrecognized option '-R'错误,许多-lboost_regex项检查都失败了!

我该如何解决这个问题?有没有我可以编辑的文件来修复它?为什么使用-R?我认为这将是-L旗帜。

2 个答案:

答案 0 :(得分:2)

由于your comment表示此-R选项来自configurem4/php-embed.m4中的以下行似乎是最有可能的来源:

LIBS="-lphp5 -L${PHP_INSTALL_PATH}/lib -R${PHP_INSTALL_PATH}/lib $LIBS"

如果您查看configure,则-R的所有其他匹配项都会将其写为${wl}-R,其中${wl}最有可能扩展为-Wl,。因此,解决此问题的一种方法是在上一行${wl}之前添加-R并运行autogen.sh以重新创建configure

在检查现有文件后,您可以提交a bug

答案 1 :(得分:0)

您可以在Git 2.23(2019年第二季度)中看到类似的错误(和解决方案),其中-R已被删除。
指定在运行时查找动态库的路径的方法 已简化。
通过-R/path/to/dir的旧默认值已被替换为通过-Wl,-rpath,/path/to/dir的新默认值,这是最近的GCC使用。

请参见commit 0f50c8eÆvar Arnfjörð Bjarmason (avar)(2019年5月17日)。
(由Junio C Hamano -- gitster --commit 51d6c0f中合并,2019年6月13日)

  

Makefile:删除NO_R_TO_GCC_LINKER标志

     

将我们的默认CC_LD_DYNPATH调用更改为GCC喜欢的内容   这些天。
  自GCC 4.6发行以来,尚未将未知标志传递给ld(1)。因此,除非设置CC_LD_DYNPATH=-R,否则我们先前的默认NO_R_TO_GCC_LINKER会在现代GCC上引起错误。

     

我们对“ -R”的使用可以追溯到455a7f3(“更多可移植性。”,   2005-09-30,Git v0.99.8a)。
  此后不久,bbfc63d(“ gcc不一定通过-R传递运行时libpath”,2006年12月27日,Git v1.5.0-rc1)中的NO_R_TO_GCC标志已添加,允许可选使用“ -Wl,-rpath=”。

     

然后在f5b904d中(“ Makefile:允许CC_LD_DYNPATH被覆盖”,   2008-08-16,Git v1.6.1-rc1)可以将此标志覆盖其他功能   完全添加了,因为某些链接器既不使用“ -Wl,-rpath,”也不使用“ -R”。

     

据我所知,我们应该借助后见之明,   在2006年进行了此更改。
  当时或至少从binutils-gdb.git开始,GCC和ld支持这种类型的调用。   a1ad915dc4(“ [...]添加对-rpath [...]的支持”,1994-07-20)。

     

进一步的阅读和现有技术可以在以下网址找到:

           

将普通报告读为“ -R”似乎是一个错误   在GCC 4.6 released on March 25, 2011中进行了介绍,但我无法   绝对确定这一点,其发行说明不明确   在这个问题上,我不厌其烦地尝试建立和二等分   反对GCC 4.5。