尝试在 Mac 10.11 上安装 QCL(量子计算语言)时出错
Error trying to install QCL (Quantum Computation Language) on Mac 10.11
我正在尝试从 this source 安装 QCL-0.6.4,但是当我在终端中使用 make
命令尝试安装时,我总是遇到错误。
我遇到了 this thread about installing QCL on OSX,但是在尝试调整 Makefile 时,我总是遇到这个错误:
extern.cc:84:18: error: variable length array of non-POD element type 'tComplex'
(aka 'complex<double>')
tComplex u[dim][dim];
^
extern.cc:193:9: error: variable length array of non-POD element type 'term'
term t[dim];
^
extern.cc:224:9: error: variable length array of non-POD element type 'term'
term t[dim];
如有任何帮助,我们将不胜感激。
这里有一些问题需要克服才能在 OSX 上进行编译。我下面的说明假设您 运行 在 El Capitan 上(在我的例子中是 10.11.1),但是对于不同的版本,您可能会从中获得一些经验。
首先,Xcode 目前使用 Apple 的 LLVM 编译器作为默认的 C++ 编译器。但是,这不支持 GCC 的一些扩展,例如支持非 POD 可变长度数组。
为了解决这个问题,我安装并使用 GCC 进行编译:如果您还没有安装 Homebrew,然后安装最新的 GCC 编译器:
$ brew install gcc
在撰写本文时,这将安装 GCC v5.2.0。
这应该可以解决您最初的问题,但您会立即打到其他人!
下一个问题是包含的 libqc.a 需要为 x86_64 重新编译。因此,您需要修改文件 <base_dir>/qc/Makefile
,并进行以下更改:
...
# Add:
CXX = /usr/local/Cellar/gcc/5.2.0/bin/g++-5
CXXFLAGS = $(ARCHOPT) -c -pedantic -Wall $(DEBUG) $(PRGOPT)
...
然后重建libqc.a
:
$ cd qc; make clean; make
如果一切顺利,你应该有一个闪亮的新 libqc.a
。
最后,修改主 Makefile <base_dir>/Makefile
并进行以下更改:
...
# Comment out:
#PLOPT = -DQCL_PLOT
#PLLIB = -L/usr/X11/lib -lplotter
...
# Comment out:
#RLOPT = -DQCL_USE_READLINE
#RLLIB = -lreadline
#RLLIB = -lreadline -lncurses
...
# Comment out:
#CXX = g++
#CPP = $(CC) -E
#CXXFLAGS = -c $(ARCHOPT) $(DEBUG) $(PLOPT) $(RLOPT) $(IRQOPT) $(ENCOPT) -I$(QCDIR) -DDEF_INCLUDE_PATH="\"$(QCLDIR)\""
#LDFLAGS = $(ARCHOPT) -L$(QCDIR) $(DEBUG) $(PLLIB) -lm -lfl -lqc $(RLLIB)
# Add:
CXX = /usr/local/Cellar/gcc/5.2.0/bin/g++-5
CPP = $(CC) -E
CXXFLAGS = -c $(ARCHOPT) $(DEBUG) $(PLOPT) $(RLOPT) $(IRQOPT) $(ENCOPT) -I$(QCDIR) -DDEF_INCLUDE_PATH="\"$(QCLDIR)\""
LDFLAGS = $(ARCHOPT) -L$(QCDIR) $(DEBUG) $(PLLIB) -lm -ll -lqc $(RLLIB) -lc++
...
现在您应该可以按照说明构建主应用程序:
$ make clean; make; make install
我正在尝试从 this source 安装 QCL-0.6.4,但是当我在终端中使用 make
命令尝试安装时,我总是遇到错误。
我遇到了 this thread about installing QCL on OSX,但是在尝试调整 Makefile 时,我总是遇到这个错误:
extern.cc:84:18: error: variable length array of non-POD element type 'tComplex'
(aka 'complex<double>')
tComplex u[dim][dim];
^
extern.cc:193:9: error: variable length array of non-POD element type 'term'
term t[dim];
^
extern.cc:224:9: error: variable length array of non-POD element type 'term'
term t[dim];
如有任何帮助,我们将不胜感激。
这里有一些问题需要克服才能在 OSX 上进行编译。我下面的说明假设您 运行 在 El Capitan 上(在我的例子中是 10.11.1),但是对于不同的版本,您可能会从中获得一些经验。
首先,Xcode 目前使用 Apple 的 LLVM 编译器作为默认的 C++ 编译器。但是,这不支持 GCC 的一些扩展,例如支持非 POD 可变长度数组。
为了解决这个问题,我安装并使用 GCC 进行编译:如果您还没有安装 Homebrew,然后安装最新的 GCC 编译器:
$ brew install gcc
在撰写本文时,这将安装 GCC v5.2.0。 这应该可以解决您最初的问题,但您会立即打到其他人!
下一个问题是包含的 libqc.a 需要为 x86_64 重新编译。因此,您需要修改文件 <base_dir>/qc/Makefile
,并进行以下更改:
...
# Add:
CXX = /usr/local/Cellar/gcc/5.2.0/bin/g++-5
CXXFLAGS = $(ARCHOPT) -c -pedantic -Wall $(DEBUG) $(PRGOPT)
...
然后重建libqc.a
:
$ cd qc; make clean; make
如果一切顺利,你应该有一个闪亮的新 libqc.a
。
最后,修改主 Makefile <base_dir>/Makefile
并进行以下更改:
...
# Comment out:
#PLOPT = -DQCL_PLOT
#PLLIB = -L/usr/X11/lib -lplotter
...
# Comment out:
#RLOPT = -DQCL_USE_READLINE
#RLLIB = -lreadline
#RLLIB = -lreadline -lncurses
...
# Comment out:
#CXX = g++
#CPP = $(CC) -E
#CXXFLAGS = -c $(ARCHOPT) $(DEBUG) $(PLOPT) $(RLOPT) $(IRQOPT) $(ENCOPT) -I$(QCDIR) -DDEF_INCLUDE_PATH="\"$(QCLDIR)\""
#LDFLAGS = $(ARCHOPT) -L$(QCDIR) $(DEBUG) $(PLLIB) -lm -lfl -lqc $(RLLIB)
# Add:
CXX = /usr/local/Cellar/gcc/5.2.0/bin/g++-5
CPP = $(CC) -E
CXXFLAGS = -c $(ARCHOPT) $(DEBUG) $(PLOPT) $(RLOPT) $(IRQOPT) $(ENCOPT) -I$(QCDIR) -DDEF_INCLUDE_PATH="\"$(QCLDIR)\""
LDFLAGS = $(ARCHOPT) -L$(QCDIR) $(DEBUG) $(PLLIB) -lm -ll -lqc $(RLLIB) -lc++
...
现在您应该可以按照说明构建主应用程序:
$ make clean; make; make install