Hello,

I am trying to compile a project with multiple source and header files. I 
am new to CMake. In the main directory, there is main.cc file. All other 
files including header and source files are stored in a subdirectory src. 
The class ibvp is similar to TopLevel class in step 18. It is defined in 
src/ibvp.h and src/ibvp.cc . In the main file, I have added #include 
"src/ibvp.h". There are 2 CMakeLists.txt, one in the main folder and 
another in the src folder. The one in the src folder is used to create a 
library mylib with all the source files. The modified lines in this cmake 
file are: 
---
SET(TARGET "mylib")

PROJECT(${TARGET})

SET(CMAKE_BUILD_TYPE Debug)

file(GLOB mylib_files *.cc)

add_library(mylib ${mylib_files})

DEAL_II_SETUP_TARGET(${TARGET})
---

Both cmake and make are running without error. 

<${main_directory}/src>$ make -j8 

[ 11%] Building CXX object CMakeFiles/mylib.dir/assemble.cc.o
[ 22%] Building CXX object CMakeFiles/mylib.dir/boundarycondition.cc.o
[ 33%] Building CXX object CMakeFiles/mylib.dir/ibvp.cc.o
[ 44%] Building CXX object CMakeFiles/mylib.dir/output.cc.o
[ 55%] Building CXX object CMakeFiles/mylib.dir/setup_system.cc.o
[ 66%] Building CXX object CMakeFiles/mylib.dir/solve.cc.o
[ 77%] Building CXX object CMakeFiles/mylib.dir/utils.cc.o
[ 88%] Building CXX object CMakeFiles/mylib.dir/gausspoint.cc.o
[100%] Linking CXX static library libmylib.a
[100%] Built target mylib


After this, I try to compile the main.cc code by linking it with the 
library mylib in the src folder. The modified lines in this cmake file are: 
---
SET(TARGET "main")

PROJECT(${TARGET})

SET(CMAKE_BUILD_TYPE Debug)

INCLUDE_DIRECTORIES(src)
add_subdirectory(src)

ADD_EXECUTABLE(${TARGET} ${TARGET}.cc)

DEAL_II_SETUP_TARGET(${TARGET})

target_link_libraries(${TARGET} mylib)
---

CMake is not giving any error. But when I run make, I get the following 
error: 

<${main_directory}>$ make -j8
Consolidate compiler generated dependencies of target mylib
[  9%] Building CXX object src/CMakeFiles/mylib.dir/assemble.cc.o
[ 18%] Building CXX object src/CMakeFiles/mylib.dir/boundarycondition.cc.o
[ 27%] Building CXX object src/CMakeFiles/mylib.dir/gausspoint.cc.o
[ 36%] Building CXX object src/CMakeFiles/mylib.dir/ibvp.cc.o
[ 45%] Building CXX object src/CMakeFiles/mylib.dir/output.cc.o
[ 54%] Building CXX object src/CMakeFiles/mylib.dir/setup_system.cc.o
[ 63%] Building CXX object src/CMakeFiles/mylib.dir/solve.cc.o
[ 72%] Building CXX object src/CMakeFiles/mylib.dir/utils.cc.o
[ 81%] Linking CXX static library libmylib.a
[ 81%] Built target mylib
[ 90%] Building CXX object CMakeFiles/main.dir/main.cc.o
[100%] Linking CXX executable main
/home/sabyasachi/Documents/current_research/irradiated_materials/irradiated_tension_engg_400C/main.cc:96:
 
error: undefined reference to 'ibvp<3>::ibvp()'
/home/sabyasachi/Documents/current_research/irradiated_materials/irradiated_tension_engg_400C/main.cc:98:
 
error: undefined reference to 'ibvp<3>::run()'
/home/sabyasachi/Documents/current_research/irradiated_materials/irradiated_tension_engg_400C/main.cc:99:
 
error: undefined reference to 'ibvp<3>::~ibvp()'
/home/sabyasachi/Documents/current_research/irradiated_materials/irradiated_tension_engg_400C/main.cc:99:
 
error: undefined reference to 'ibvp<3>::~ibvp()'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/main.dir/build.make:132: main] Error 1
make[1]: *** [CMakeFiles/Makefile2:100: CMakeFiles/main.dir/all] Error 2
make: *** [Makefile:91: all] Error 2

So there are  undefined references to the ibvp class constructor, 
destructor and run function. Please suggest how to resolve this. I have 
attached all the relevant files with only the relevant lines of code. I 
would appreciate any help. 

Thank you. 

-- 
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see 
https://groups.google.com/d/forum/dealii?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to dealii+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/dealii/08c17b44-673a-4aff-8b08-af3f9fb6e87en%40googlegroups.com.
...
#include "ibvp.h"

//namespace problem
//{

  using namespace dealii; 
  using namespace std; 

#ifndef IBVP_CC
#define IBVP_CC

  template <int dim>
  ibvp<dim>::ibvp()
    : (all initialization)
  {
    ...
  }   

  template <int dim>
  ibvp<dim>::~ibvp()
  {
    ...
  }

  template <int dim>
  void ibvp<dim>::run()
  {
    ...
  }

#endif

//}
...

#include "src/ibvp.h"
//#include "src/utils.h"

int main(int argc, char **argv)
{

  try
    {
      using namespace dealii; 
      Utilities::MPI::MPI_InitFinalize mpi_initialization(argc, argv, 1);

      std::cout<<"\n Starting..."; 
      ibvp<3> irradiation;
      std::cout<<"\n Object created..."; 
      irradiation.run();
    }
  ...
}
##
#  CMake script for the initial boundary value problem:
##

# (cmake and deal ii requirement checks - from CMakeLists.txt of Step 18)

# changes made my me

SET(TARGET "mylib")

PROJECT(${TARGET})

SET(CMAKE_BUILD_TYPE Debug)

file(GLOB mylib_files *.cc)

add_library(mylib ${mylib_files})

DEAL_II_SETUP_TARGET(${TARGET})

##
#  CMake script for the initial boundary value problem:
##

# (cmake and deal ii requirement checks - from CMakeLists.txt of Step 18)

DEAL_II_INITIALIZE_CACHED_VARIABLES()

#changes made by me 

SET(TARGET "main")

PROJECT(${TARGET})

SET(CMAKE_BUILD_TYPE Debug)

INCLUDE_DIRECTORIES(src)
add_subdirectory(src)

# Set the name of the project and target:

ADD_EXECUTABLE(${TARGET} ${TARGET}.cc)

DEAL_II_SETUP_TARGET(${TARGET})

target_link_libraries(${TARGET} mylib)

...

...

#ifndef IBVP_H
#define IBVP_H

template <int dim>
  class ibvp
  {
    public:
      ibvp();
      ~ibvp();
      void run();
      //Tensor<4, dim> get_stress_strain_tensor_lagrangian() {return stress_strain_tensor_lagrangian;}; 
    (all function definitions e.g. setup system, assemble, solve, output etc.)
    ...
      //double km_prefactor;
    };

#endif

//}

Reply via email to