optimad / bitpit

Open source library for scientific HPC
http://optimad.github.io/bitpit/
GNU Lesser General Public License v3.0
115 stars 34 forks source link

Undefined Reference to `bitpit::ParaTree::ParaTree` #456

Open myermo opened 3 months ago

myermo commented 3 months ago

Hi there,

I hope this message finds you well. I'm encountering an issue while attempting to use the Paratree object in my project. Whenever I compile my code, I encounter the following error:

/usr/bin/ld: /tmp/cc5WslX9.ltrans0.ltrans.o: in function `main':
<artificial>:(.text+0x6bb85): undefined reference to `bitpit::ParaTree::ParaTree(unsigned char, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'

It seems like there's an undefined reference to bitpit::ParaTree::ParaTree during the linking phase. I've checked my code and made sure that I'm including all necessary headers and linking against the appropriate libraries, but I'm still encountering this issue.

Here's a brief overview of my setup:

Steps to reproduce:

  1. Include <bitpit/ParaTree.hpp> in a file.
  2. Try to build the Paratree with bitpit::ParaTree pt(2);

I've tried various solutions such as checking the include paths, ensuring the correct libraries are linked, and confirming that the necessary functions are declared and defined properly, but the problem persists.

The only library I have to link bitpit is libbitpit_MPI.so. Also, I'm compiling the library enabling MPI support with -D BITPIT_ENABLE_MPI=on.

Could you please provide guidance on how to resolve this issue? Any help would be greatly appreciated.

Thank you for your time and assistance.

Best regards, myermo

andrea-iob commented 3 months ago

Are you using cmake to compile your application? If so, how do you add the bitpit library to your targets? The preferred way to use bitpit in cmake is to find the bitpit library with find_package and then add it to your targets with target_link_libraries:

find_package(BITPIT REQUIRED)
include(${BITPIT_USE_FILE})
target_link_libraries(name_of_your_target PRIVATE bitpit::bitpit)

After doing this, a new variable called BITPIT_DIR will appear in cmake GUI, this variable should be set to "BITPIT_INSTALL_PATH/share/bitpit/cmake" (with BITPIT_INSTALL_PATH being the directory where bitpit has been installed).

I'm attaching an archive that contains both the cmake file and the source code needed to run a minimal PABLO example. You can run it with:

tar -zxvf pablo_test.tar.gz
mkdir build
cd build/
ccmake ../
<<<< Here you need to configure cmake to find your bitpit installation >>>>
VERBOSE=1 make
./test

Can you try it and check if it works for you?

pablo_test.tar.gz