如何在C++中使用Octave库

3

这是我在这里提出的第一个问题,如果不够清晰或显得愚蠢,请提前谅解。

我正在尝试在C++中使用Octave库。

我在Ubuntu上使用Qt Creator(Linux初学者)。

#include "octave/oct.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    Matrix matrix(3,4);

    return a.exec();
}

起初我遇到了一些未定义的引用错误。我发现程序缺少库,所以我寻找了名为“liboctave.so”的库。我在usr/lib/octave-3.2.4中找到了它。更准确地说,有一个符号链接名为“liboctave.so”,指向“liboctave.so.3.2.4”文件。我使用Qt Creator的“添加库”功能将库添加到我的项目中。程序在我的.pro文件中生成了以下代码。
unix:!macx:!symbian: LIBS += -L$$PWD/../../../../usr/lib/octave-3.2.4/ -loctave

INCLUDEPATH += $$PWD/../../../../usr/lib/octave-3.2.4
DEPENDPATH += $$PWD/../../../../usr/lib/octave-3.2.4

程序编译无误,甚至没有关于未定义引用的投诉。但当我运行它时,我遇到了以下问题:

开始/home/martin/Projects/test-build-desktop/test...

/home/martin/Projects/test-build-desktop/test: error while loading shared libraries: liboctave.so: cannot open shared object file: No such file or directory
/home/martin/Projects/test-build-desktop/test exited with code 127

我无法理解为什么它找不到文件。我正在用肉眼查看文件。

我想问题可能是权限,所以我将“liboctave.so.3.2.4”文件复制到项目位置,重命名为“liboctave.so”,并为每个人添加了所有权限。然后使用Qtcreator的“添加库”功能添加了此库,但仍然出现相同的错误。

请帮帮我。

1个回答

2

liboctave未安装在标准位置,当您编译时,需要提供参数-L$$PWD/../../../../usr/lib/octave-3.2.4/,但是在运行时它是未知的。

因此,您有两个选择:

  1. Provide environment variable LD_LIBRARY_PATH=/full/path/to/usr/lib/octave-3.2.4 and then run the program:

    export LD_LIBRARY_PATH=/full/path/to/usr/lib/octave-3.2.4
    
  2. Hardcode the path withing excutable using an additional option: -Wl,-rpath=$$PWD/../../../../usr/lib/octave-3.2.4/

    And it would search for it in this location.


谢谢!第一个选项可行。但是我必须在声明环境变量的同一 shell 会话中运行可执行文件。当我尝试使用 QtCreator 执行可执行文件时,它不起作用。但这只是我对 Linux 知识的缺乏。 - Martin Drozdik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接