alandefreitas/matplotplusplus

Followed build and install instruction but failed to compile sample elsewhere.

fhvirus opened this issue · 2 comments

Bug category
Installation issues.

Describe the bug
I followed build and install instruction, but when compiling an example manually (not with cmake, it failes to link and gives following error for each function I use from matplot++:

/usr/bin/ld: /tmp/ccqhfOPZ.o: in function `main':
t.cpp:(.text+0x3c): undefined reference to `matplot::linspace(double, double)'
collect2: error: ld returned 1 exit status

Steps to Reproduce

Following Build and install guide for Ubuntu + GCC.

Output

There is no .cpp files under /usr/local/include/matplot.

Installed files:

-- Install configuration: "Release"
-- Installing: /usr/local/lib/Matplot++/libnodesoup.a
-- Installing: /usr/local/include/matplot/detail/exports.h
-- Installing: /usr/local/lib/libmatplot.a
-- Up-to-date: /usr/local/include/matplot
-- Up-to-date: /usr/local/include/matplot/backend
-- Installing: /usr/local/include/matplot/backend/opengl_embed.h
-- Installing: /usr/local/include/matplot/backend/backend_interface.h
-- Installing: /usr/local/include/matplot/backend/opengl.h
-- Installing: /usr/local/include/matplot/backend/backend_registry.h
-- Installing: /usr/local/include/matplot/backend/gnuplot.h
-- Up-to-date: /usr/local/include/matplot/util
-- Installing: /usr/local/include/matplot/util/geodata.h
-- Installing: /usr/local/include/matplot/util/popen.h
-- Installing: /usr/local/include/matplot/util/type_traits.h
-- Installing: /usr/local/include/matplot/util/common.h
-- Installing: /usr/local/include/matplot/util/contourc.h
-- Installing: /usr/local/include/matplot/util/handle_types.h
-- Installing: /usr/local/include/matplot/util/keywords.h
-- Installing: /usr/local/include/matplot/util/concepts.h
-- Installing: /usr/local/include/matplot/util/colors.h
-- Up-to-date: /usr/local/include/matplot/freestanding
-- Installing: /usr/local/include/matplot/freestanding/figure_functions.h
-- Installing: /usr/local/include/matplot/freestanding/axes_lim.h
-- Installing: /usr/local/include/matplot/freestanding/plot.h
-- Installing: /usr/local/include/matplot/freestanding/histcounts.h
-- Installing: /usr/local/include/matplot/freestanding/axes_functions.h
-- Up-to-date: /usr/local/include/matplot/core
-- Installing: /usr/local/include/matplot/core/axis_type.h
-- Installing: /usr/local/include/matplot/core/legend.h
-- Installing: /usr/local/include/matplot/core/figure_registry.h
-- Installing: /usr/local/include/matplot/core/axes_type.h
-- Installing: /usr/local/include/matplot/core/line_spec.h
-- Installing: /usr/local/include/matplot/core/figure_type.h
-- Installing: /usr/local/include/matplot/core/axes_object.h
-- Up-to-date: /usr/local/include/matplot/detail
-- Installing: /usr/local/include/matplot/detail/config.h
-- Installing: /usr/local/include/matplot/matplot.h
-- Up-to-date: /usr/local/include/matplot/axes_objects
-- Installing: /usr/local/include/matplot/axes_objects/bars.h
-- Installing: /usr/local/include/matplot/axes_objects/surface.h
-- Installing: /usr/local/include/matplot/axes_objects/stair.h
-- Installing: /usr/local/include/matplot/axes_objects/box_chart.h
-- Installing: /usr/local/include/matplot/axes_objects/circles.h
-- Installing: /usr/local/include/matplot/axes_objects/line.h
-- Installing: /usr/local/include/matplot/axes_objects/function_line.h
-- Installing: /usr/local/include/matplot/axes_objects/parallel_lines.h
-- Installing: /usr/local/include/matplot/axes_objects/labels.h
-- Installing: /usr/local/include/matplot/axes_objects/vectors.h
-- Installing: /usr/local/include/matplot/axes_objects/contours.h
-- Installing: /usr/local/include/matplot/axes_objects/filled_area.h
-- Installing: /usr/local/include/matplot/axes_objects/network.h
-- Installing: /usr/local/include/matplot/axes_objects/string_function.h
-- Installing: /usr/local/include/matplot/axes_objects/histogram.h
-- Installing: /usr/local/include/matplot/axes_objects/matrix.h
-- Installing: /usr/local/include/matplot/axes_objects/error_bar.h
-- Installing: /usr/local/lib/cmake/Matplot++/Matplot++Targets.cmake
-- Installing: /usr/local/lib/cmake/Matplot++/Matplot++Targets-release.cmake
-- Installing: /usr/local/lib/cmake/Matplot++/Matplot++ConfigVersion.cmake
-- Installing: /usr/local/lib/cmake/Matplot++/Matplot++Config.cmake

Platform

  • cross-platform issue - linux
  • cross-platform issue - windows
  • cross-platform issue - macos

Environment Details:

  • OS: Kubuntu
  • OS Version: 22.04.3
  • Compiler: g++
  • Compiler version: GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)

not with cmake

The instructions use cmake to link the libraries. By not using cmake, you have the responsibility to do all the linking the cmake scripts do by yourself. Simply not linking it won't work.

I had the same problem on Almalinux 8.8. Here is what I did.

Suppose the libmatplot.a (libmatplot.so) library is in "/matplot1.2.0/lib64" folder

1- For compiling you example (main.cpp), you have to specify all the required libraries, and the path to "matplotlib.a":

g++ -std=c++17 -L/matplot1.2.0/lib64 -lmatplot -lstdc++fs -lpng -ljpeg -ltiff -llapack -lblas -lfftw3 -lpthread -lz main.cpp -o myoutfile

Notice -L/matplot1.2.0/lib64 to specify the path

2- For launching Now you have to specify the path to the library for launch your example (myoutfile). You may have the same problem if you test the examples which come the package.

eport LD_LIBRARY_PATH=/matplot1.2.0/lib64:$LD_LIBRARY_PATH
./myoutfile

This works for me.