I'm simply trying to use functions from a C-libary (the Space Group library spglib) inside my C++ code. The library is already compiled and installed in an Anaconda environment.
A minimal example looks like this:
extern "C"
{
#include "spglib.h"
}
#include <iostream>
static void test_spg_get_symmetry(void);
int main(void)
{
test_spg_get_symmetry();
return 0;
}
static void test_spg_get_symmetry(void)
{
double lattice[3][3] = {{4, 0, 0}, {0, 4, 0}, {0, 0, 3}};
double position[][3] =
{
{0, 0, 0},
{0.5, 0.5, 0.25},
{0.3, 0.3, 0},
{0.7, 0.7, 0},
{0.2, 0.8, 0.25},
{0.8, 0.2, 0.25},
{0, 0, 0.5},
{0.5, 0.5, 0.75},
{0.3, 0.3, 0.5},
{0.7, 0.7, 0.5},
{0.2, 0.8, 0.75},
{0.8, 0.2, 0.75}};
int types[] = {1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2};
int num_atom = 12;
int max_size = 50;
int i, j, size;
int rotation[max_size][3][3];
double translation[max_size][3];
double origin_shift[3] = {0.1, 0.1, 0};
for (i = 0; i < num_atom; i++)
{
for (j = 0; j < 3; j++)
{
position[i][j] += origin_shift[j];
}
}
printf("*** Example of spg_get_symmetry (Rutile two unit cells) ***:\n");
size = spg_get_symmetry(rotation,
translation,
max_size,
lattice,
position,
types,
num_atom,
1e-5);
for (i = 0; i < size; i++)
{
printf("--- %d ---\n", i + 1);
for (j = 0; j < 3; j++)
printf("%2d %2d %2d\n", rotation[i][j][0], rotation[i][j][1], rotation[i][j][2]);
printf("%f %f %f\n",
translation[i][0], translation[i][1], translation[i][2]);
}
}
I'm compiling with a command similar to this:
g++ -g symm.cpp -o main.exe -I/miniconda3/env/include -Lminiconda3/env/aims-env/lib/libsymspg.a
But I get a linking error every time:
undefined reference to 'spg_get_symmetry'
.
What am I missing? Any help is appreciated.