linux正确的语法,通过配置传递libstdc ++。so.6的自定义目录

时间:2016-06-22 17:58:28

标签: c++ c linux gcc

我有一个自定义编译的gcc 5.4.0,其文件夹结构为/home/gccprefix/lib64/libstdc++.so.6

到目前为止,编译已通过配置(例如CC=/home/gccprfix/bin/gcc CFLAGS=-fPIC CFLAGS=-Wfatal-errors CFLAGS=-I/home/gccprefix/header/tr1)传递额外的标记。

但是现在我在使用/home/gccprefix/bin/ragel编译cairo时遇到了问题。为了编译,我有一个bash脚本,其中标志被分配为变量,例如

MYFLAGS="CC=/home/gccprfix/bin/gcc CFLAGS=-fPIC CFLAGS=-Wfatal-errors CFLAGS=-I/home/gccprefix/header/tr1"
.../configure ${MYFLAGS}

Ragel使用上述/home/gccprefix/bin/gcc进行编译,没有错误。

然而,在make期间,cairo,我得到了

ragel: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ragel) 

这是因为gcc找到了默认的/usr/lib64/libstdc++.so.6。因此,遵循SO上的几个线程,我相信我需要扩展传递给configure的标志。

正确的语法是什么

`CFLAGS=-Wl,-rpath,/home/gccprefix/lib64`

或者我放弃CFLAGS=

`-Wl,-rpath,/home/gccprefix/lib64` 

使用CFLAGS=的第一个选项,新的libstdc++.so.6未通过,并且发生相同的错误,使用不带CFLAGS的发送只会出错

configure: error: unrecognized option: `--Wl,-rpath,/home/gccprefix/lib64'

那么我使用什么前缀?

1 个答案:

答案 0 :(得分:0)

正确的语法是

./configure ... LDFLAGS=-Wl,-rpath=/home/gccprefix/lib64

查看生成的Makefile,你可能可以使用CXXFLAGS,但不能使用CFLAGS,它们根本不用于C ++项目。

注意CFLAGS=-fPIC CFLAGS=-Wfatal-errors CFLAGS=-I...没有意义,只有-I...将被传递给编译器,并且只传递给C编译器。请尝试CXXFLAGS="-fPIC -Wfatal-errors -I...",确保configure将其作为单个参数。通过MYFLAGS传递它可能不会起作用。