bitpit icon indicating copy to clipboard operation
bitpit copied to clipboard

Undefined Reference to `bitpit::ParaTree::ParaTree`

Open myermo opened this issue 11 months ago • 1 comments

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:

  • Compiler: g++ 13.2.1
  • Operating System: Arch Linux with Kernel 6.7.8

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

myermo avatar Mar 15 '24 10:03 myermo

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

andrea-iob avatar Mar 18 '24 08:03 andrea-iob