ubuntu中的犰狳问题
Armadillo issue in ubuntu
我一直在用armadillo在Ubuntu和windows8上写一个c++程序。在Windows8下,程序编译没有问题。
程序只是使用线性系统解算器。
在Ubuntu下编译器显示
"对' wrapper_dgels_'的引用未定义"
我使用的编译器行是:
mpic++ -O2 -std=c++11 -Wall -fexceptions -O2 -larmadillo -llapack -lblas program.o
然而,在错误之前我看到:
g++ module_of_the_error.o
这是我没有设置的。
我在Ubuntu中使用代码块,我用所有需要的库编译了armadillo。(BLAS
我不知道什么可能导致这个问题,因为完全相同的代码在visual studio中编译。我已经尝试了编译器行修改建议,但它似乎不工作。
这是我曾经掉进的一个陷阱。你不会喜欢你的错误的可能原因。
链接器的参数顺序很重要。
不是mpic++ -O2 -std=c++11 -Wall -fexceptions -O2 -larmadillo -llapack -lblas program.o
试题:
mpic++ -O2 -std=c++11 -Wall -fexceptions -O2 program.o -larmadillo -llapack -lblas
。,将要链接的目标文件放在库之前的可执行文件中。
顺便说一下,在这个阶段你只链接已经编译过的文件。没有必要重复只与编译相关的命令行选项。所以这是等价的:
mpic++ program.o -larmadillo -llapack -lblas
此外,根据您安装Armadillo的方式,您在该行中添加了一个或两个多余的库。
mpic++ program.o -larmadillo
或
mpic++ program.o -llapack -lblas
EDIT:正如rex的回答所说,问题可能只是提供给g++的开关/参数的简单排序。所有的- 1开关都要在- 0开关之后。换句话说,把- 0放在-l之前。例如:
g++ prog.cpp -o prog -O3 -larmadillo
原始回答:
看起来你的编译器找不到Armadillo运行时库。正确的解决方案是使用-L开关指定armadillo运行时库的路径。例如,g++ -O2 blah.cpp -o blah -L/usr/local/lib/-larmadillo
另一种可能的解决方案是在包括犰狳头文件之前定义ARMA_DONT_USE_WRAPPER,然后直接链接LAPACK和BLAS。例如:
#define ARMA_DONT_USE_WRAPPER
#include <armadillo>
更多详细信息请访问犰狳常见问题页面
相关文章:
- 在Ubuntu 16.04上安装Cilk时出现问题
- 无法安装 R 包 "nloptr"(Ubuntu 16.04 上的 R3.6.2) - C++编译器问题
- 使用 ubuntu 终端在 c++ 上运行线程类的问题
- OBJ 文件C++与 ubuntu 问题
- 在 Ubuntu 16.04 LTS 上使用 c++ 编译问题?
- 编译问题与 Ubuntu Linux
- Ubuntu 下的 Cmake 和 Intel IPP 的编译问题
- 如何解决我在 Ubuntu 19.04 下使用 GLFW 时遇到的这个编译问题?
- wxWebView在Ubuntu上的编译问题
- 加密蛋白使编译问题Ubuntu
- Linux上按键模拟的问题(Ubuntu 18)
- 使用 ubuntu Linux 的 c++ 文件重定向和编码问题
- 在 ubuntu 的 shell 上编译 cpp 程序时出现问题
- 在Ubuntu中与G 链接的问题
- 在Ubuntu中构建OpenCV 3.1.0的问题
- 我正在尝试运行CUDA示例,但是我在Ubuntu 16.04 Lts上的OpenGL(libglew.a)有问题
- Ubuntu 13.10 C++ OpenGL GLUT - 链接问题 - 未定义对"glClearColor"的引用
- 在 Ubuntu 中使用 OpenSSL 的链接问题
- 使用CMake问题链接Boost(Ubuntu 14.04)
- UBUNTU C 的 USB 到串行通信问题