Нет. Вы должны сделать символы отличными. То есть function1
в вашем проекте source1.cpp должно иметь имя, отличное от имени в вашей библиотеке.
Не зная больше о ситуации, вы можете сделать это, поместив библиотеку или проект в пространство имен.
// lib/source1.h
namespace mylib {
void function1();
}
// lib/source1.cpp
namespace mylib {
void function1() {
...
}
}
// project/source1.h
namespace myproj {
void function1();
}
// project/source1.cpp
namespace myproj {
void function1() {
...
}
}
Теперь в своем коде вы можете позвонить myproj::function1()
или mylib::function1()
. Эти символы будут отличаться. Если вы всегда используете одно, а не другое, компоновщик, вероятно, откажется от того, который не используется (по крайней мере, в оптимизированной сборке).
Если вы не хотите изменять все вызовы в своем коде, вы можете добавить строку типа using myproj::function1()
, которая сообщит компилятору, что когда вы говорите function1()
, вы подразумеваете тот из вашего проекта.