Вы делаете:
#include "lib1/vec.h"
#include "lib2/vec.h"
Ваш make-файл должен содержать пути до lib1 и lib2.
-I /usr/local/include /user/include
Вы должны убедиться, что у заголовков есть охранники, чтобы они не были объявлены дважды. Вы должны увидеть что-то вроде:
#ifndef MYHEADER_H_ab2592zx1__
#define MYHEADER_H_ab2592zx1__
#include ...
#include ...
class ...
#endif
У вас должны быть эти охранники независимо от того, есть ли у вас два включения с одним и тем же именем, и они обычно должны заканчиваться чем-то довольно случайным, чтобы ограничить / снизить вероятность того, что они конфликтуют с защитой заголовка в другом файле.