Without the octave-dev.conf fragment in place, compile the attached file using

 $ ​mkoctfile --link-stand-alone embedded.cc -o embedded

when I run created executable I see

$ ./embedded
./embedded: error while loading shared libraries: liboctinterp.so.10: cannot 
open shared object file: No such file or directory

After putting octave-dev.conf in /etc/ld.so.conf.d and running ldconfig I see

$ ./embedded
Available Octave Graphics Toolkits:
fltk
gnuplot

Please let me know if you have any other questions or need anything else from 
me.

Thanks,
Antony

________________________________
From: Rafael Laboissière <raf...@debian.org>
Sent: Sunday, January 28, 2024 4:18 PM
To: Antony N. Donovan <a...@mit.edu>; 1061...@bugs.debian.org 
<1061...@bugs.debian.org>
Cc: Debian Bug Tracking System <sub...@bugs.debian.org>
Subject: Re: Bug#1061644: octave-dev: The package should include an ld.so.conf 
fragment pointing to the shared libraries

Control: tags -1 - patch + moreinfo

* Antony Donovan <a...@mit.edu> [2024-01-27 15:52]:

> Package: octave-dev
> Version: 7.3.0-2
> Severity: normal
> Tags: patch
>
> Dear Maintainer,
>
> I installed octave-dev and after building a standalone executable with
> mkoctfile it failed to run.
>
> I realized that what was needed was an ld.so.conf fragment containing
> the directory where the shared libraries were located.
>
> I created that fragment, with the contents
> /usr/lib/x86_64-linux-gnu/octave/7.3.0, named it octave-dev.conf,
> put that file in /etc/ld.so.conf.d, and ran ldconfig.
>
> This fixed the issue of running the standalone octave executable.

Thank you for your bug report.

Could you please provide us with a complete example that reproduces
the bug?

Best,

Rafael Laboissière
#include <iostream>
#include <octave/oct.h>
#include <octave/octave.h>
#include <octave/parse.h>
#include <octave/interpreter.h>
#include <octave/builtin-defun-decls.h>

int
main (void)
{
  // Create interpreter.

  octave::interpreter interpreter;

  try {
    interpreter.initialize_load_path(true);
    interpreter.initialize();

    if (!interpreter.initialized()) {
      std::cerr << "Octave interpreter initialization failed!"
                << std::endl;
      return 2;
    }

    int status = interpreter.execute ();
    if (status != 0) {
      std::cerr << "creating embedded Octave interpreter failed!"
                << std::endl;
      return status;
    }
    std::cout << "Available Octave Graphics Toolkits:" << std::endl;

    octave_value_list ovl = octave::Favailable_graphics_toolkits(interpreter);
    charMatrix tks = ovl(0).char_matrix_value();


    octave_idx_type len = tks.rows();
    for (octave_idx_type i = 0; i < len; i++) {
      std::cout << tks.row_as_string(i) << std::endl;
    }

  } catch (const octave::exit_exception& ex) {
    std::cerr << "Octave interpreter exited with status = "
              << ex.exit_status () << std::endl;
  } catch (const octave::execution_exception& ex) {
    std::cerr << "error encountered in Octave evaluator!" <<
      ex.message() << std::endl;
  }

  return 0;
}

Reply via email to